定理:一个奇素数z可以表示成z=x^2+y^2的形式,当且仅当z可以表示成4*t+1的时候成立。
题意:给定L和R,求[L,R]区间内,素数的个数,以及能表示成z=x^2+y^2的形式的素数个数
可以用筛选法求素数,然后判断区间内满足条件的个数。当时只根据上诉定理判断了奇素数,但是偶素数即
2=1^2+1^2也满足上述题目条件。因此要多加注意。
还得判断下L R值是否为负值,因为负值不可能是素数。
代码:
#include<stdio.h>
int a[1000010]={1,1,0};
void prime()
{
int i,j;
for(i=2;i<=1000000;i++)
if(a[i]==0)
for(j=i+i;j<=1000000;j+=i)
a[j]=1;
}
int main()
{
int m,n,i,s,t;
prime();
while(scanf("%d%d",&m,&n)!=EOF){
if(m==-1&&n==-1)
break;
s=t=0;
if(n>0){
if(m<0)
i=0;
else
i=m;
for(;i<=n;i++)
if(a[i]==0){
s++;
if(i%4==1)
t++;
}
if(n>=2&&m<=2)
t++;
}
printf("%d %d %d %d\n",m,n,s,t);
}
return 0;
}