hd 2098 分拆素数和

来源:互联网 发布:网络运营商查询 编辑:程序博客网 时间:2024/06/01 09:43

原题链接

 

#include<stdio.h>int sushu(int n){    int i;    for(i=2;i<=n/2;i++)    {    if(n%i==0)    return 1;}    return 0;                       }int main(){    int n,i,j;    while(scanf("%d",&n)!=EOF&&n!=0)    {      j=0;      for(i=2;i<=n/2;i++)     if(sushu(i)==0&&sushu(n-i)==0&&i!=n-i)     j++;     printf("%d\n",j);                                    }return 0;    }


打表法

#include<stdio.h>int prime[10010]={1,1,0};int fun(){    int i,j;    for(i=2;i*i<10010;i++)    {    if(!prime[i])   {     for(j=i*i;j<10010;j+=i)     prime[j]=1;             }            }             }int main(){    int n,k,i;    while(scanf("%d",&n)!=EOF&&(n!=0))     {     k=0;     fun();      for(i=2;i<=n/2;i++)      {      if(prime[i]==0&&prime[n-i]==0&&i!=n-i)      k++;         }     printf("%d\n",k);                                }    //while(1);return 0;    }


//使用while(1);记得加分号才能达到效果,使用完毕记得注释掉

//如果程序超时就看是否注释掉while(1);

//打素数表注意if(!a[i]),注意先定义数组,再定义函数,在main()函数中再调用此函数时注意加上函数名,比如此例中的fun();

//做题先审清题才能少做无用功,比如此例中“不同素数”,那就要加上限制条件“i!=n-i;”
0 0
原创粉丝点击