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;
}

 

posted @ 2010-07-27 10:26  勇泽  阅读(236)  评论(0编辑  收藏  举报