Semi-prime H-numbers--POJ 3292
1、解题思路:数论,打表,分层筛选。
2、注意事项:分层筛选中,摒弃的条件判断;首次1A。
3、实现方法:
#include<iostream>
using namespace std;
struct Node
{
int data;
int l,r;
bool flag;
int count;
};
Node Arr[250010];
int main()
{
int i,j;
for(i=0;i<=250000;i++)
Arr[i].data=i*4+1;
for(i=1;i<255;i++)
{
for(j=i;Arr[i].data*Arr[j].data<=1000001;j++)
{
int tmp=(Arr[i].data*Arr[j].data-1)/4;
Arr[tmp].l=i;
Arr[tmp].r=j;
Arr[tmp].flag=1;
}
}
Arr[0].count=0;
for(i=1;i<250001;i++)
{
if(!Arr[i].flag)
Arr[i].count=Arr[i-1].count;
else
{
//判断其子因子是否为H-semi-prime
if(!Arr[Arr[i].l].flag&&!Arr[Arr[i].r].flag)
Arr[i].count=Arr[i-1].count+1;
else
Arr[i].count=Arr[i-1].count;
}
}
int n;
while(cin>>n && n)
{
cout<<Arr[(n-1)/4].data<<" ";
cout<<Arr[(n-1)/4].count<<endl;
}
return 0;
}