所有形如4n+1(n为非负整数)的数叫H数。定义1是唯一的单位H数, H素数是指本身不是1,且不能写成两个不是1的H数的乘积。 H-半素数是指能写成两个H素数的乘积的H数(这两个数可以相同也可以不同)。 例如,25是H-半素数,但125不是。 输入一个H数h(h≤1000001),输出1~h之间有多少个H-半素数。 类似埃筛法
#include<cstring> #include<algorithm> #include<iostream> using namespace std; const int M=1e6+2; int b[M+5],p[M+5],vis[M+5],tot ; int A[M+5]; void sov(){ int i,j,x; for(i=5;i<=M;i+=4){ if(b[i]) continue; p[++tot]=i; for(j=1;j*i<=M;j+=4) b[j*i]=1; } for(i=1;i<=tot;i++) for(j=1;j<=tot;j++){ if(p[i]*p[j]>M) break; vis[p[i]*p[j]]=1; } for(i=1;i<=M;i++) A[i]=A[i-1]+(vis[i]); while(cin>>x,x){ cout<<x<<' '<<A[x]<<endl; } } signed main() { sov(); }
标签:prime,int,vis,素数,numbers,UVA,include From: https://www.cnblogs.com/towboa/p/17308262.html