什麼是素數?素數是指大於1的自然數,只能被1和它本身整除的數,而無法被其他自然數整除。
一、【主函數】
#include<stdio.h>
int isPrime(int x);
int main()
{
int i=0,n=0;
printf("請輸入要判斷的數(>=0):");
scanf("%d",&n);
if(isPrime(n))
printf("%d是素數\n",n);
else
printf("%d不是素數\n",n);
return 0;
}
二、【isPrime() 函數】
①讓n被i除(i從2~n-1),如果n能夠被2~n-1之間的任何一個整數整除,則n肯定不是素數。不足:對於n要循環n-1遍,當n很大時就是n遍。
int isPrime(int x)
{
int ret=1,i;
if(x==1|| x==0) ret=0;
for(i=2;i<x;i++)
{
if(x%i == 0)
{
ret=0;
break;
}
}
return ret;
}
②去掉偶數後,從3到x-1,每次加2。如果x是偶數,立刻,否則要循環(n-3)2+1遍,當n很大時就是n/2遍
int isPrime(int x)
{
int ret=1,i;
if(x==1|| x==0 && x!=2 && x%2 == 0) ret=0; //偶數不是素數
for(i=3;i<x;i+=2)//就只判斷奇數
{
if(x%i == 0)
{
ret=0;
break;
}
}
return ret;
}
③ 無須到x-1,到sqrt(x)就夠了。只需要循環sqrt(x)遍
int isPrime(int x)
{
int ret=1,i;
if(x==1 || x!=2 && x%2 == 0) ret=0; //>2 偶數不是素數
for(i=3;i<sqrt(x);i+=2)//就只判斷奇數
{
if(x%i == 0)
{
ret=0;
break;
}
}
return ret;
}