hdu—1010

来源:互联网 发布:石醒宇 知乎 编辑:程序博客网 时间:2024/06/14 05:53

LJZ的ACM协会后援团

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 0    Accepted Submission(s): 0


Problem Description
ljz是acm协会的会长,众所周知,只有最帅的人才能当会长,ljz在进入协会的第一天就被学长看中,经过交易后不负众望成为了会长。长得帅自然会有人喜欢,所以ljz身边总是围绕着一大堆学弟,这让他很困扰,他要从其中挑出一个成为自己的心腹?现在有有n个学弟,每个学弟身上都有一个值Ai,若Ai能分解成一个素数和一个合数(都大于0)的和,则能为该学弟增加一点魅力值,不同的方案都会提供一点魅力值。例如一个学弟的Ai为11,那么11=2+9、11=3+8、11=5+6、11=7+4,那么他的魅力值为4。现在要求出这n个学弟的魅力值。
 

Input
第一行先给出总人数n<=100.第2行至n+1行每一行都有一个值2<=Ai<=1000。会输入多个n
 

Output
输出总共为n行,每一行输出Ai对应的魅力值。
 

Sample Input
3 5 8 11
 

Sample Output
0 1 4
 

【分析】
数据非常小...送分的,但是坑的也是这题...注意看这里读取有多组n.....
筛法求一下素数..然后直接判断就好了...注意一下这里是合数而不是偶数....1不是合数
【代码】
#include <cstdio>#include <iostream>#include <cstring>using namespace std;  int prime[100000];   bool vis[100000];  int len=0;int init()  {        memset(vis,0,sizeof(vis));      for(int i=2;i<2000;i++)      {          if(!vis[i]) prime[len++]=i;          for(int j=0;j<len&&i*prime[j]<2000;j++)          {              vis[i*prime[j]]=1;              if(i%prime[j]==0) break;          }      }     }  int main(){    init();    int n;    int pp;    while (~scanf("%d",&pp))    {        while (pp--)        {            scanf("%d",&n);            int ans=0;            for (int i=0;i<len&&n>prime[i];i++)                if ( vis[n-prime[i]])                        ans++;            printf("%d\n",ans);        }    }    return 0;    }



原创粉丝点击