標籤:
程式碼:
using System;using System.Collections.Generic;using System.Text;namespace FindTheNumber{ class Program { static void Main(string[] args) { int [] rg = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, 20,21,22,23,24,25,26,27,28,29,30,31}; 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)) { Console.WriteLine("found {0}", i); } } } }}
1. 這個程式找的是在rg數組中只有連續的兩個數不能整除,其餘都能整除的符合這樣條件的數。
2. 存在;最小為數組中的數除16和17外的最小公倍數2123581660200 .
3. 外迴圈執行了2123581660200次,執行一次外迴圈內迴圈執行大約12次,參考電腦配置,執行一次%用80個周期,所以執行時間約為:2123581660200*12*80/(4*10^9*60)=8500min 。
4. 同時對n個i進行操作,大大提高程式執行速度。
註:一開始認為不能被整除的只有連續的兩個質數2,3但如果這樣這個數就不會存在。經過與同學的交流得到思路。連續的兩個數只能是16和17。(程式執行時間參考了薛鵬飛的部落格)
軟體工程第三周作業(二)