您好,登錄后才能下訂單哦!
講解兩種算法,其實是一種,只不過第二種在第一種的的方法優(yōu)化了一點:
第一種:直接取100到200之間的奇數(shù),因為偶數(shù)肯定不是素數(shù),然后對每個數(shù)用取余數(shù)的方法判斷是不是素數(shù),最后再判斷一下出來的數(shù)是否和自身相等,相等即是素數(shù)。
代碼:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int count, num1, num2 = 0;
for (num1 = 101; num1 <= 200; num1 += 2)//偶數(shù)不是素數(shù),直接用奇數(shù)。
{
for (num2 = 2; num2 <= num1; num2++)
{
if (num1 % num2 == 0)
break;
}
if (num2 == num1 )//因為是素數(shù)的話,只有1和自身能除過。
{
printf("%d ", num1);
count++;
}
}
printf("\ncount=%d", count);
system("pause");
return 0;
}
第二種:用到了平方根的辦法來減少需要判斷的數(shù),
原因是因為
用到這個方法,同時也將較為抽象的判斷素數(shù)方法變?yōu)橐胍粋€參數(shù)來判斷,更加清楚。
代碼:
//打印100到200的素數(shù)(平方根優(yōu)化法)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int i, t, k,count = 0;
int flag = 0;//僅僅是判斷是合數(shù)還是素數(shù)引入的一個參數(shù)
for (k = 100; k <= 200; k++)
{
t = sqrt(k);
for (i = 2; i <= t; i++)
{
if (k % i == 0)//判斷語句你特么給我寫上“==”,別在犯錯了!
{
flag = 1;
break;
}
}
if (flag == 0)
{
printf("%d \n", k);
count++;
}
flag = 0;//每次循環(huán)結(jié)束,參數(shù)要歸零,不然后面都是1。
}
printf("count = %d", count);
system("pause");
return 0;
}
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。