题目链接:点击打开链接
题目大意:
We all know, prime is a kind of special number which has no other factors except of 1 and itself.
2,3,5,7,11,13,17,19,23,29 are the top 20 primes.
Now there is a new question about prime:
We call a prime as super prime when and only when which can be represented as the sum of multiple continuous primes. For example: 5=2+3, so 5 is a super prime.
Please program to judge whether a number is a super prime or not.
2,3,5,7,11,13,17,19,23,29 are the top 20 primes.
Now there is a new question about prime:
We call a prime as super prime when and only when which can be represented as the sum of multiple continuous primes. For example: 5=2+3, so 5 is a super prime.
Please program to judge whether a number is a super prime or not.
输入
The first line is an integer T (T<=1000), and then T lines follow.
There is only one positive integer N(1<N<100000).
There is only one positive integer N(1<N<100000).
输出
For each case you should output the case number first, and then the word "yes" if the integer N is a super prime, and you should output "no" otherwise.
示例输入
3 5 7 8
示例输出
Case 1: yes Case 2: no Case 3: no
代码:
///Super Prime
#include <iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
int h=100100;
int q[100100];
memset(q,0,sizeof(q));
q[0]=q[1]=1;
int w=sqrt((double)h)+1;
int p,t,k;
for( p=2; p<=w; p++)
{
if(q[p]==0)
{
for(t=p; t*p<=h; ++t)
{
if(q[t]==0)
{
for(k=p*t; k<=h; k*=p)
{
q[k]=1;
}
}
}
}
}
int y[10000];
int top=0;
for(int i=0; i<=h; i++)
{
if(q[i]==0) y[top++]=i;
}
int x,n;
cin>>x;
for(int i=1; i<=x; i++)
{
cin>>n;
if(q[n]==1||n==2||n==3||n==7)
{
printf("Case %d: no\n",i);
}
else
{
for(int j=0;j<top;j++)
{
if(y[j]==n)
{
p=j;
break;
}
}
int front=p ,back=p;
int sum=0;
front--;
back--;
back--;
sum=sum+y[front];
sum=sum+y[back];
int f=0;
while(1)
{
if(sum>n)
{
sum=sum-y[front];
front--;
if(back==front)
{
if(back==0)
{
f=0;
break;
}
back--;
sum=sum+y[back];
}
}
if(sum==n)
{
f=1;
break;
}
else
{
if(back==0)
{
f=0;
break;
}
back--;
sum=sum+y[back];
}
}
if(f==0)printf("Case %d: no\n",i);
else printf("Case %d: yes\n",i);
}
}
return 0;
}