求范围内质(素)数,无暇质数对。



2014年05月06日→星座:金牛座
二〇一四年四月初八
甲午〖马〗己巳月丁丑日丁未时
今属:火;五行:木火土;缺:金水。
纳音五行:沙中金。
    
释迦牟尼佛圣诞;九殿平等王诞;又观音斋;又十斋日|六斋|十斋


一个大于1的自然数,如果除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为素数(质数) 否则称为合数。根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积 而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。在自然数域内,质数是不可再分的数,是组成一切自然数的基本元素。

	int 起数(0), 范围(0), 计数(1), 位 = 0;
	cout << "输入2个整数 起数、范围:" << endl;
	cin >> 起数 >> 范围;
	int *动态 = new int(), *无暇质数 = new int();
	/*求范围内素数*/
	for (int 被除数 = 起数; 被除数 != 范围; 被除数++)
	{
		bool 判 = true;
		for (int 除数 = 2; 除数 != 被除数 + 1; 除数++)
		{
			if (被除数 > 1)/*任何数都可以被1整除跳过输入1,除数1直接设为2,且减少内循环设计*/
			{
				if (被除数 % 除数 == 0 && 被除数 != 除数)
				{
					判 = true;
					break;
				}
				if (被除数 == 除数)
				{
					判 = false;
					break;
				}
			}
		}
		if (!判 && 位 < 222)
		{ 
			printf("%6d ", 被除数);
			if (计数 % 10 == 0) printf("\n");/*控制显示个数*/
			计数++;
			动态[位] = 被除数;/*限制数组维度,存储数据为之下无暇质数准备*/
			位++;
		}
	}
	printf("\n");

另外说明一下,有些初学虽然告诉她用之上内循环可检查一个数是否是质数,但是她不会,在这顺便说明把那个数替换内循环被除数就可以验证是否是质数了:

for (int 除数 = 2; 除数 != 待验证数 + 1; 除数++)这样替换就可以了,只要去掉外循环,但要保留 判 这个变量不要删除.

无暇质数对

	printf("\n之下输出无暇质数对,如:79=>97、167=>761\n");
	for (int 序 = 0; 序 != 位; 序++)
	{
		if (动态[序] > 10)
		{
			起数 = 动态[序]; 范围 = 1;
			int 序位 = 0;
			do/*输出各位数*/
			{
				无暇质数[序位++] = 起数 % 10;
				起数 /= 10;
			} while (起数 > 0);
			起数 = 0;/*反转各位数*/
			for (int 序1 = 序位 - 1; 序1 >= 0; 序1--)
			{
				起数 += 无暇质数[序1] * 范围;
				范围 *= 10;
			}
			for (int 序2 = 0; 序2 != 位; 序2++)
			if (起数 == 动态[序2])
			{
				printf("%6d ", 动态[序]);
				if (计数 % 10 == 0) printf("\n");
				计数++;
			}
		}
	}
	printf("\n");

本月佛菩萨圣诞纪念日发布:

2014年05月02日→星座:金牛座
二〇一四年四月初四
甲午〖马〗,己巳月,癸酉日,庚申时
今属:水;五行:木火土水金;缺:。
纳音五行:沙中金。

文殊师利菩萨圣诞提前在5月1日已经公布,

        /*质(素)数推算*/

        List<int> 质数集 = new List<int>() { 2 }; bool 判 = true; int 范围 = 4999;
        string 位数 = ""; foreach (int a in Enumerable.Range(0, ((范围 + 1) * 2).ToString().Length)) 位数 += "0";
        foreach (int 自然数 in Enumerable.Range(1, 范围).Select(奇数 => (奇数 *= 2) + 1))
        {/*变换为奇数后减少一半循环量如1000只须500,虽然变换要花费时间,然减少循环量部分足以弥补,之下范围控制为自然数内减少循环量*/
            foreach (int 除数 in Enumerable.Range(2, 自然数))
            {/*素数都是奇数?偶数都可以被2整除!.Select(奇数 => 奇数 = (奇数 % 2 == 0) ? 奇数 += 1 : 奇数)这种筛选不会快反而慢*/
                if (自然数 > 除数)/*跳过自身及大于无意义*/
                    if (自然数 % 除数 == 0)
                    {
                        判 = true;
                        break;
                    }
                    else 判 = false;
                //else break;/*内循环大于自然数范围须跳出*/
            }
            if (!判)
            {
                质数集.Add(自然数);
                判 = true;
            }
        }


        foreach (int 自然数 in Enumerable.Range(1, 范围).Select(奇数 => (奇数 *= 2) + 1))
        {
            foreach (int 除数 in Enumerable.Range(2, 自然数 - 2))/*进一步优化控制范围*/
            {
                if (自然数 % 除数 == 0)
                {
                    判 = true;
                    break;
                }
                else 判 = false;
            }
            if (!判)
            {
                质数集.Add(自然数);
                判 = true;
            }
        }

        /*找出无暇素数.所谓无暇素数是指本身为素数,且其逆序数也是素数的数,这例计算全逆序,如107=>701*/
            List<int> 无暇素数 = new List<int>();
            foreach (int 质数 in 质数集)
                if (质数 > 10)
                    if (质数集.Contains(int.Parse(string.Concat(质数.ToString().ToCharArray().Reverse()))))
                        无暇素数.Add(质数);

            var 质数生成 = DateTime.Now - 开始时间;
            string 串联 = ""; int 个数 = 9;
            foreach (int 数 in Enumerable.Range(0, 质数集.Count / 个数 + 1).Select(制 => 制 *= 个数))
            {
                foreach (var 行 in Enumerable.Range(数, 个数))/*控制一行内串联个数*/
                {
                    if (行 >= 质数集.Count) break;
                    串联 += 质数集[行].ToString(位数) + " ";
                }
                串联 += "\n";
            }
            Console.WriteLine(串联);
            Console.WriteLine("质数生成{0} {1}", 质数生成, DateTime.Now - 开始时间);
            foreach (int 数 in Enumerable.Range(1, 质数集.Count / 8).Select(十 => 十 *= 8))
                Console.WriteLine("{0} {1} {2} {3} {4} {5} {6} {7}", 质数集[数 - 8].ToString(位数), 质数集[数 - 7].ToString(位数), 质数集[数 - 6].ToString(位数), 质数集[数 - 5].ToString(位数), 质数集[数 - 4].ToString(位数), 质数集[数 - 3].ToString(位数), 质数集[数 - 2].ToString(位数), 质数集[数 - 1].ToString(位数));
            Console.WriteLine(string.Join("  ", 质数集));
补充:
	int s,i;
	for (i = 2; i < 100; i++)
	{
		for (s = 2; s < i + 1; s++)
		{
			if (i % s == 0 && s != i) break;
			if (s == i)
			{ 
				cout << i << " "; 
				break;
			}
		}
	}
VB:制定范围内质数和
        Dim 范围 = 1000, 判 = True, 积 = 0
        For Each 自然数 As Integer In Enumerable.Range(1, 范围).Select(Function(奇数) 奇数 * 2 + 1)
            For Each 除数 As Integer In Enumerable.Range(2, 自然数 - 2)
                If 自然数 Mod 除数 = 0 Then
                    判 = True
                    Exit For
                Else
                    判 = False
                End If
            Next
            If 判 = False Then
                积 += 自然数
                判 = True
            End If
        Next
        Console.WriteLine(积)







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值