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(积)