任意给出一个数字x,判断是否为素数,是返回1,否返回0
(最基本的方法是从2到x-1去除x,若能整除,则不为素数,再改进就是从2到x/2去除x,再改进就是 从2到sqrt(x)去除x,这里不再赘述)
方法1
先排除掉小于等于1的数字,均不为素数;除了2之外的所有偶数也均不为素数,故也排除掉。
接下来用从3到sqrt(x)之间的所有奇数来除x,如果能够整除,则不为素数,跳出循环。
int isPrime( int x ){
int ret=1;
if(x<=1||(x%2==0&&x!=2)){
ret=0;
}else{
for(int i=3;i<=sqrt(x);i+=2)
if(x%i==0){
ret=0;
break;
}
}//以上操作没有相应处理的数字x为2和大于2小于9的奇数,它们均为素数,程序一开始置ret=1,故符合条件。
return ret;
}
方法2:
判断x是否能够被已知的且<x的素数整除
前提是构造一张素数表
从(2)开始,不能被前面所有的数字整除的数字即为素数,同时将该数字存入素数表,依次类推(2,3)---->(2,3,5)—>…
该函数实现输出前100个素数
#include<stdio.h>
int main(){
const int number=100;
int prime[number]={2};
int count = 1;
int i=3;
while(count<number){
if(isPrime(i,prime,count)){
prime[count++]=i;
}
}
for(i=0;i<number;i++){
printf("%d",prime[i]);
if((i+1)%5==0) printf("\n");
else printf("\t");
}
return 0;
}
int isPrime(int x,int knownPrime[],int numOfKnownprimes){
int ret=1;
for(int i=0;i<numOfKnownprimes;i++){
if(x%knownPrime[i]==0){
ret=0;
break;
}
}
return ret;
}