24h購物| | PChome| 登入
2009-07-22 18:52:38| 人氣503| 回應0 | 上一篇 | 下一篇

NOIP2002普及組第二題 2.選數

推薦 0 收藏 0 轉貼0 訂閱站台

作法:(所謂的素數,應該是質數)

建質數表(線性篩法),產生組合之後.再加總(我是沿路做加總),利用所建的質數表再做質數判斷

/**********************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int way[30]={0},num[30]={0},math[5200]={0};
int a,n,m,ans,p;
void make (int now,int a,int n,int m,int sum)
{
  int b=a,c;
  if(now==m+1)
   {
     int d=(int)sqrt(sum),flag=0;
     for(c=0;c<p&&math[c]<=d;c++)
       if(sum%math[c]==0) {flag=1;break;}
     if(flag==0) ans++;
     return;
   }
  else
  for(b=a;b<=n;b++)
   {
    way[now]=b;
    make(now+1,b+1,n,m,sum+num[way[now]]);
   }
}
int prime()
{
  char num[100000]={0};
  int a,b,m=0;
 for(a=2;a<50000;a++)  
      if(num[a]==0)  
        {  
           math[m]=a;  
           m++;  
           for(b=2;a*b<=50000;b++)  
             num[a*b]=1;  
        }
   return m;
}
main()
{
 p=prime();
 while(scanf("%d %d",&n,&m)==2)
  {
    for(a=1;a<=n;a++)  scanf("%d",&num[a]);
    ans=0;
    make(1,1,n,m,0);
    printf("%d\n",ans);
  } 
 return 0;  
}

台長: 來源不明
人氣(503) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: 資訊競賽 |
此分類下一篇:雅禮中學2007模擬試題 獎金(reward)
此分類上一篇:NOIP2002 普及組第一題 1.級數求和

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文