【小明的发现】
小明发现一个有趣的现象:除2这个特别的素数外,所有的素数都能分成两类:第一类是被4除余1 的素数,如5、13、17、29、37、41;第二类是被4除余3的素数,如3、7、11、19、23、31。
小明感到很奇怪的是:第一类素数都能表示成两个整数的平方和,第二类则不能。如:
5=1×1+2×2
13=2×2+3×3
17=1×1+4×4
29=2×2+5×5
更有趣的是:上述有些等式右侧的数又恰恰是两个素数,如上面13和29两个数所在式子的等号右侧就是素数,小明把这样的数取名为“奇妙素数”。既:一个素数F能够表示成两个素数的平方和形式
F=X×X+Y×Y,其中X、Y都是素数,那么它就是奇妙素数。
请你帮助小明把所有不大于N的奇妙素数打印出来。
【输入格式】
只有一个整数N(3≤N≤108)。
【输出格式】
第1到N行:输出不大于N的所有奇妙素数。每行输出一个,并把平方和的形式输出:F=X*X+Y*Y;
第N+1行:输出不大于N的所有奇妙素数的总数。
【完善程序】
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int i,j,k,count=0,f,maxy,n;
bool yes,prime[45000];;
cin>>n;
maxy=sqrt(n);
memset(prime,true,sizeof(prime));
for(int i=2;i<=sqrt(maxy);i++)
if(⑤ )
for(int j=2;⑥ ;j++)
⑦ ;
for(int i=3;⑧;i++)
if(prime[i])
{
f=2*2+i*i;
if(⑨)
{
yes=true;
for(int j=2;j<= sqrt(f);j++)
if( ⑩ )
yes=false;
if(yes)
{
count++;
cout<<f<<"=2*2+"<<i<<"*"<<i<<endl;
}
}
}
cout<<count;
}
[5]:
[6]: