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

 

你可能感兴趣的:(number)