poj2739

#include<stdio.h>

#include<math.h>

#define MAX 10105

int prime[1300]={0},s[10105]={0};

int isPrime(int n)

{

	int i;

	for(i=2;i<=sqrt(1.0*n);i++)

		if(n%i==0)

			return 0;//0 is not prime

	return 1;//1 is prime

}

int main()

{

	int i,j,k,n,ans,sum;

	k=0;

	for(i=2;i<=MAX;i++)

	{

		if(s[i]==0)

			prime[k++]=i;

		for(j=i;j<=MAX;j=j+i)

			s[j]=1;

	}

	while(scanf("%d",&n)!=EOF&&n!=0)

	{

		ans=0;

		if(n==1)

			printf("0\n");

		else{

		if(isPrime(n)==1)ans++;

		

		for(i=0;prime[i]<n;i++)

		{

			sum=0;

			for(j=i;prime[j]<n;j++)

			{

				sum+=prime[j];

				if(sum==n)

				{

					ans++;

					break;

				}

				if(sum>n)

					break;

			}

		}

		printf("%d\n",ans);}

	}

	return 0;

}

  题意:给定一个数,有多少种可以由素数相加而得到的方案

你可能感兴趣的:(poj)