標籤:
問題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:
多核電腦在迴圈時可以同時執行幾步,效率要比單核快得多。
軟體工程 第三周 作業(二)