码迷,mamicode.com
首页 > 其他好文 > 详细

Semi-prime H-numbers POJ - 3292 打表(算复杂度)

时间:2019-01-16 22:56:30      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:pac   std   numbers   prim   log4   超时   amp   ==   ace   

题意:参考https://blog.csdn.net/lyy289065406/article/details/6648537

一个H-number是所有的模四余一的数。

如果一个H-number是H-primes 当且仅当它的因数只有1和它本身(除1外)。

一个H-number是H-semi-prime当且仅当它只由两个H-primes的乘积表示。

H-number剩下其他的数均为H-composite。

给你一个数h,问1到h有多少个H-semi-prime数。
思路  :直接暴力打表 因为h <=1e6  而  打表的复杂度是 log4(h)*log4(h)所以 不会超时  不要误以为是n^2的复杂度

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<vector>
 4 #include<cmath>
 5 #include<iostream>
 6 using namespace std;
 7 const int maxn=1e6+1000;
 8 int H_primes[maxn+1];
 9 int vis[maxn+1];
10 int ans[maxn];
11 int cnt;
12 void init(){
13     cnt=0;
14     for(int i=5;i<=maxn;i+=4){
15         for(int j=5;j<=maxn;j+=4){
16             int mul=i*j;
17             if(mul>maxn)break;
18             if(H_primes[i]==0&&H_primes[j]==0)
19                 H_primes[mul]=1;
20             else H_primes[mul]=-1;
21         }
22 
23     }
24     for(int k=1;k<=maxn;k++){
25         if(H_primes[k]==1)
26             cnt++;
27         ans[k]=cnt;
28     }
29 }
30 int main(){
31     init();
32     int n;
33     while(scanf("%d",&n)==1&&n){
34         printf("%d %d\n",n,ans[n]);
35     }
36     return 0;
37 }

 

Semi-prime H-numbers POJ - 3292 打表(算复杂度)

标签:pac   std   numbers   prim   log4   超时   amp   ==   ace   

原文地址:https://www.cnblogs.com/ttttttttrx/p/10279695.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!