PKU 3511 Fermat's Christmas Theorem
http://poj.org/problem?id=3511
整数u,lが与えられる。[l,u]の範囲にある素数の個数と、2つの整数の和で表される素数の数を答えろというような問題。
最初にn以下の素数と2つの整数の和で表される素数をすべて列挙する。
入力がかなりいやらしく、両方とも-1になるパターン以外に負が含まれているようなのでそれを対策する。
あと、2が2つの整数の和で表される数であることに気づかずにWAったりした。
bool pr[1000001]; int npr[1000001]; int fnpr[1000001]; main(){ pr[0]=pr[1]=true; for(int i=2;i<=1000000;i++){ if(pr[i])continue; for(int j=2*i;j<=1000000;j+=i)pr[j]=true; } for(int i=2;i<=1000000;i++){ npr[i]=npr[i-1]+!pr[i]; fnpr[i]=fnpr[i-1]+!pr[i]*(i%4==1)+(i==2); } int l,u; while(cin>>l>>u,~l | ~u){ cout<<l<<' '<<u<<' '<<npr[u>0?u:0]-npr[l>0?l-1:0]<<' '<<fnpr[u>0?u:0]-fnpr[l>0?l-1:0]<<endl; } }