標籤:
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.該段代碼測試的是尋找一個數,該數能且只能“不被”2-31之間連續的兩個數整除
分析:
Int64 :表示的是有符號的64位元,即表示值介於 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之間的整數
j < rg.Length:表示的是j小於數組rg的長度,即j小於30
hit1:表示的是第一個不能被整除的數
hit2:表示的是第二個不能被整除的數
(hit == 2)&& (hit1+1==hit2):在2-31中上述所述的數有且只能有兩個,並且這兩個數是連續的
2.這樣的數不存在:
因為這個數只能被兩個數整除,所以這個數是兩個數之外其他數的最小公倍數,所以先假設能被整除的兩個數,算出其他數的最小公倍數,看能否整除假設的兩個數,如不能,則該數為要找的最小的目標數,如能,則改變假設數繼續運算。
3.運算量較大,無法完成運算
4.盡量減少啟動其他程式,減少cpu的佔用量
軟體工程第三周作業(2)