1. 程式人生 > >hd 2098 分拆素數和

hd 2098 分拆素數和

原題連結

#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;”