c語(yǔ)言判斷素?cái)?shù)的函數(shù)程序:
朝陽(yáng)縣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)的ssl證書(shū)銷(xiāo)售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書(shū)合作)期待與您的合作!
經(jīng)分析,以上代碼使用flag的值來(lái)判斷輸入的n是否為素?cái)?shù),flag=1,n為素?cái)?shù);flag=0,n不是素?cái)?shù)。完善if條件語(yǔ)句,第一個(gè)if,主函數(shù)中的if調(diào)用函數(shù),需要填入一個(gè)參數(shù),即prime(n);第二個(gè)if,是判斷什么情況下flag=0,即輸入的整數(shù)不為素?cái)?shù),即(n/i==0),余數(shù)為0,可以整除;最后返回flag的值,returnflag
但是經(jīng)過(guò)運(yùn)行可以知道,n=4的時(shí)候,程序判斷4是素?cái)?shù),明顯是錯(cuò)誤的,n取0和1的時(shí)候同理,程序存在漏洞。分析得知,在定義函數(shù)的過(guò)程中,for循環(huán)條件語(yǔ)句,i=0,如果為負(fù)整數(shù),另加判斷條件,略)
#include?stdio.h
#include?math.h
//判斷是否為素?cái)?shù)的函數(shù)
int?isPrime(int?n)
{
int?i=2;
while(i=(int)sqrt(n))
{
if(n%i?==?0)
return?0;??//不是素?cái)?shù),直接返回0
else
i++;
}
return?1;
}
int?main()
{
int?n,i;
printf("輸入一個(gè)正整數(shù):?");
scanf("%d",n);
for(i=2;i=n;i++)
{
if(isPrime(i))??//調(diào)用函數(shù),如果該數(shù)為素?cái)?shù),則輸出
printf("%d?",i);
}
printf("\n");
return?0;
}
示例運(yùn)行結(jié)果:
輸入一個(gè)正整數(shù): 50
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
基本思想:把m作為被除數(shù),將2—INT()作為除數(shù),如果都除不盡,m就是素?cái)?shù),否則就不是。
可用以下程序段實(shí)現(xiàn):
voidmain()
{intm,i,k;
printf("pleaseinputanumber:\n");
scanf("%d",m);
k=sqrt(m);
for(i=2;ik;i++)
if(m%i==0)break;
if(i=k)
printf("該數(shù)是素?cái)?shù)");
else
printf("該數(shù)不是素?cái)?shù)");
}
將其寫(xiě)成一函數(shù),若為素?cái)?shù)返回1,不是則返回0
intprime(m%)
{inti,k;
k=sqrt(m);
for(i=2;ik;i++)
if(m%i==0)return0;
return1;
}
擴(kuò)展資料:
100-200之間的素?cái)?shù)的個(gè)數(shù),以及所有的素?cái)?shù)
#includestdio.h
#includemath.h
intmain()
{
inta,m,k,i;
a=0;
for(i=101;i=200;i++)
{
for(k=2;ki;k++)
if(i%k==0)break;
if(k=i)
a++;
}
printf("%d\n",a);
for(i=101;i=200;i++)
{
for(k=2;ki;k++)
if(i%k==0)break;
if(k=i)
a++;
if(k=i)
printf("%d",i);
}
printf("\n");
return0;
}