/判斷是不是素?cái)?shù)
成都創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來,先為天心等服務(wù)建站,天心等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為天心企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
#includestdio.h
int prime(int a);//函數(shù)聲明
int main()
{
int n,i;
scanf("%d",n);
if(prime(n)==1) //return返回值1
printf("prime");
else
printf("not prime") ;
}
int prime(int a)
{
int i;
for(i=2;ia;i++)
if(a%i==0)
return 0;//a%i==0不成立
else
return 1;//a%i==0成立
}
擴(kuò)展資料:
素?cái)?shù)的算法
1、素?cái)?shù):除了1和本身外無法被其他自然數(shù)整除的數(shù),叫做素?cái)?shù),也稱質(zhì)數(shù),如:2,3,5,7一系列。
2、合數(shù):比1大但不是素?cái)?shù)的數(shù)稱為合數(shù),如:8,9,10一系列。
3、特殊的數(shù)字:1和0既不是素?cái)?shù)也不是合數(shù)。
4、算法:? 1確定性算法? ?2隨機(jī)性算法? 3Eratosthenes算法。
還有一個(gè)錯(cuò)誤,C語言中沒有bool類型,默認(rèn)返回值是0,你可以一個(gè)一個(gè)類型的函數(shù)檢測、float,沒有返回值時(shí)、double類型的函數(shù),你這個(gè)程序不只是邏輯不能那樣說,但是如果是long或者char型時(shí),返回值就不是0了,如果是返回值int。
另外多說一句、算法錯(cuò)了
c語言判斷素?cái)?shù)的函數(shù)程序:
經(jīng)分析,以上代碼使用flag的值來判斷輸入的n是否為素?cái)?shù),flag=1,n為素?cái)?shù);flag=0,n不是素?cái)?shù)。完善if條件語句,第一個(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)過運(yùn)行可以知道,n=4的時(shí)候,程序判斷4是素?cái)?shù),明顯是錯(cuò)誤的,n取0和1的時(shí)候同理,程序存在漏洞。分析得知,在定義函數(shù)的過程中,for循環(huán)條件語句,i=0,如果為負(fù)整數(shù),另加判斷條件,略)
我以前寫的程序,絕對(duì)正確
#include stdio.h
#include stdlib.h
#include math.h
void main()
{
long num,nu;
long number();
int a=0;
while(1)
{
printf(\"1.判斷是否是素?cái)?shù)\\n2。退出\\n請選擇:\");
scanf(\"%d\",a);
switch(a)
{
case 1:
printf(\"\\n請輸入判斷數(shù)字\");
scanf(\"%ld\",num);
nu=num;
num=number(num);
if(num!=0)
printf(\"%ld是素?cái)?shù)\\n\",num);
else
printf(\"%ld不是素?cái)?shù)\\n\",nu);
printf(\"\\n\\n\");
break;
case 2:
exit(0);
default:
printf(\"\\n您輸入的有錯(cuò)誤,請重新輸入!\\n\\n\");
break;
}
}
}
long number(n)
long n;
{
static long k,i;
static long m;
k=(long)sqrt(n);
for(i=2;i=k;i++)
if(n%i==0)
break;
if(i=k+1)
m=n;
else
m=0;
return(m);
}