題目:判斷101-200之間有多少個(gè)素?cái)?shù),并輸出所有素?cái)?shù)。
程序分析:判斷素?cái)?shù)的方法:用一個(gè)數(shù)分別去除2到sqrt(這個(gè)數(shù)),如果能被整除, 則表明此數(shù)不是素?cái)?shù),反之是素?cái)?shù).
-
思路分析:
- 這里需要進(jìn)行兩個(gè)求解:
第一個(gè)是求解素?cái)?shù)的個(gè)數(shù),第二個(gè)是打印這些素?cái)?shù)的.
- (1) 在101-200之間限定了范圍是在101-200之間的數(shù),要判斷在這個(gè)區(qū)間的數(shù),需要判斷這區(qū)間的每一個(gè)數(shù),所以需要遍歷,在計(jì)算機(jī)中,遍歷就是做一個(gè)或多個(gè)for循環(huán)操作
所以判斷101-200區(qū)間數(shù),就寫為
- 這里需要進(jìn)行兩個(gè)求解:
for(int i = 101; i <= 200; i += 2)
{
}
這里定義一個(gè)變量i,因?yàn)槭菑?01開始的,所以初始值設(shè)置為101,到200,就是小于等于200,因?yàn)槭琴|(zhì)數(shù),每次都是增加2,所以寫作i+=2,就是i=i+2
- (2)判斷一個(gè)數(shù)是素?cái)?shù),就是數(shù)學(xué)中的質(zhì)數(shù),質(zhì)數(shù)就是除了1和它本身沒有其他因數(shù)的數(shù),舉例5=15,所以5的因數(shù)就是1和5,所以5是素?cái)?shù),而6=23.6=1*6,6的因數(shù)就有1,2,3,6,這就是四個(gè),它就不是素?cái)?shù).
根據(jù)以上描述可得,素?cái)?shù)的數(shù),都是可以跟自己整除的數(shù),所以運(yùn)用取莫運(yùn)算,因?yàn)槿∧\(yùn)算可以得到0和1,0和1可以判斷真假,從而得出是否為質(zhì)數(shù),
可以用101到200之間的數(shù),分別除以一個(gè)數(shù),得1的就是質(zhì)數(shù),得0的就是其他數(shù),這樣一直判斷下去,這樣就又形成一個(gè)判斷區(qū)間,就是多次取莫
因?yàn)樽钚〉馁|(zhì)數(shù)是2,所以從2開始,到根號(hào)200結(jié)束,每次加一
2~√200 區(qū)間(至于為什么是√200,可以百度一下,為什么素?cái)?shù)需要根號(hào)判斷,這是一個(gè)數(shù)學(xué)問題,請(qǐng)問數(shù)學(xué)老師)這里只說,可以提高效率
得到循環(huán)
for(int j = 2; j <= √200; j++)
{
if(i % j == 0)
{
- (3)判斷是質(zhì)數(shù),設(shè)置一個(gè)計(jì)數(shù)器命名count=0,隨著每次增加count增加
if(是質(zhì)數(shù))
{
count++;
}
思路就是如此,我這里用了集合,最后數(shù)值放入一個(gè)集合中顯示,如果還是不清楚,代碼復(fù)制入編譯器,然后run一下.
@SuppressWarnings( { "unchecked", "rawtypes" })
public class _002101_200PrimeNumber
{
public static void main(String[] args)
{
countZhiShu();
}
private static void countZhiShu()
{
// 計(jì)算變量
int count = 0;
// 集合,用來裝所有的素?cái)?shù)
Vector v = new Vector();
for(int i = 101; i <= 200; i += 2)
{
// 判斷依據(jù)
boolean b = false;
for(int j = 2; j < Math.sqrt(i); j++)
{
// 求余數(shù)是否為0
if(i % j == 0)
{
// 如果為0, 將標(biāo)簽設(shè)置為false
b = false;
// 可以整除就跳出這個(gè)循環(huán)
break;
}
else
{
b = true;
}
}
if(b == true)
{
// 素?cái)?shù)個(gè)數(shù)加1
count++;
// 將符合要求的i加到集合里
v.add(i);
}
}
System.out.println("100到200中間有 " + count + " 個(gè)素?cái)?shù)");
System.out.println("素?cái)?shù)為:\n" + v);
}
}