问题1:
for (Int64 i = 1; i < Int64.MaxValue; i++)
{
int hit = 0;
int hit1 = -1;
int hit2 = -1;
for (int j = 0; (j < rg.Length) && (hit <=2) ; j++)
{
if ((i % rg[j]) != 0)
{
hit++;
if (hit == 1)
{
hit1 = j;
}
else if (hit == 2)
{
hit2 = j;
}
else
break;
}
}
if ((hit == 2)&& (hit1+1==hit2))
由此段代码知,程序要在0~2的64次幂中选出一个数
1.这个数i无法被数组中连续的两个数整除。
2.数组中除了这两个连续的数都可以将i整除
这便是程序寻找的数符合的条件
问题2:
如果i不能被数组中的一个数a整除,那么他也不能被a的倍数(同属于该数组)整除,当a>1时,这a与a的整数倍(最小是2a)便不会是连续的两个数
这样便不满足问题1中的条件,所以要找到i对应的两个属于数组的数,就应该排除掉a这种数,数组中小于16的数都满足该条件,所以将16之前的数都排
除掉。
对于剩下的数,质数不作处理,将合数进行拆分,以寻找能不被其他数最小公倍数整除的合数。剩下11个合数,也就是说只要求出是个合数的最小公倍
数,然后看能否被剩下的合数整除,分别求10次,来找出符合要求的合数,如果他与一个质数相连,则符合条件。经计算,最后16,17符合要求。除去16
17,剩下数数的公倍数为2123581660200。
问题3:
for (int j = 0; (j < rg.Length) && (hit <=2) ; j++) { if ((i % rg[j]) != 0) { hit++; if (hit == 1) { hit1 = j; } else if (hit == 2) { hit2 = j; } else break; }
我认为直到hit>2时跳出里层循环,循每次环的次数都是不一样的,而且不好估计均值,只知道外层循环循环了2123581660200次
所以我认为无法精确求出运行时间。
问题4:
多核电脑在循环时可以同时执行几步,效率要比单核快得多。