所有形如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();
}
浙公网安备 33010602011771号