寻找n个素数
1.寻找n个素数,这里假设n为100,
1.1判断是否是素数的方法:
/**
@x 需要判断的数,
@knownPrimes[] 已经存在的,比x小的素数表
@numberOfKnownPrimes 素数表的大小
*/
int isPrime(int x,int knownPrimes[],int numberOfKnownPrimes);
具体实施:
1.创建一个素数表;
2.根据需要不是素数必然有素数的因式,并且第一个素数是2,
3.这样我们就可以根据第一个素数表{2},寻找之后的素数;
int isPrime(int x,int knownPrimes[],int numberOfKnownPrimes)
{
int ret =1;
int i;
//首先默认是素数
//遍历已经存在的素数表,只有当原来的素数能被整除的时候
//因为不是素数的数,比如有素数的因式
for (i=0; i<numberOfKnownPrimes; i++) {
if(x%knownPrimes[i]==0)
{
ret=0;
break;
}
}
return ret;
}
具体代码
#include<stdio.h>
//首先默认是素数
//遍历已经存在的素数表,只有当原来的素数能被整除的时候
//因为不是素数的数,比如有素数的因式
int isPrime(int x,int knownPrimes[],int numberOfKnownPrimes);
int main(void)
{
const int number = 100;
int prime[number] ={2};//素数表,并且第一个素数为2
int count =1;//素数的个数
int i =3;//从3开始寻找素数
while (count<number) {
if(isPrime(i,prime,count)){
prime[count++]=i;
}
i++;
}
return 0;
}
int isPrime(int x,int knownPrimes[],int numberOfKnownPrimes)
{
int ret =1;
int i;
//首先默认是素数
//遍历已经存在的素数表,只有当原来的素数能被整除的时候
//因为不是素数的数,比如有素数的因式
for (i=0; i<numberOfKnownPrimes; i++) {
if(x%knownPrimes[i]==0)
{
ret=0;
break;
}
}
return ret;
}
创建一个素数表
寻找大小为n的素数表中间存在的素数,假如是的话为1,不是为0
#include <stdio.h>
int main()
{
const int maxNumber =25;
int isPrime[maxNumber];
int i;
int x;
//初始化所有都是素数
for (i=0; i<maxNumber; i++) {
isPrime[i]=1;
}
for (x=2; x<maxNumber; x++) {//遍历整个素数表,这样保证一个不会漏掉
if(isPrime[x])//假如是素数,我们才将他整数倍都排除,已知2是第一个素数
{
for (i=2; i*x<maxNumber; i++) {//从而
isPrime[i*x]=0;
}
}
}
return 0;
}