筛选出一定范围内的质数,下面是POJ2739。常遇到质数的问题但过后又忘记了,在这里标记一下。
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int i;
int j;
bool test[10002]; //1 非质数
int primes[10000];
memset(test,0,10002*sizeof(bool));
test[0] = test[1] = true;
int sq = sqrt(double(10002));
for(j = 4;j < 10002;j += 2) //用2筛
test[j] = 1;
for(i = 3;i < sq;i += 2)
{
while(test[i])
i += 2;
for(j = i * 2;j < 10002;j += i)
test[j] = true;
}
int nprime = 0;
for(i = 2;i < 10002;++i)
{
if(! test[i])
primes[nprime++] = i;
}
int sum;
int cnt;
int rest;
while(scanf("%d",&sum) != EOF && sum != 0)
{
cnt = 0;
for(i = 0;i < nprime;++i)
{
if(sum < primes[i])
{
break;
}
rest = sum;
for(j = i;j < nprime;++j)
{
rest -= primes[j];
if(rest == 0)
{
++cnt;
break;
}
if(rest < 0)
break;
}
}
printf("%d/n",cnt);
}
return 0;
}