poj3292 素数筛选
来源:互联网 发布:php 图片裁剪上传插件 编辑:程序博客网 时间:2024/06/08 03:55
题目链接点击打开链接
题意:h数为4*n + 1 的数 , h数可以分为unit (只有数字1) , h素数 和 h合成数, h素数类似素数的定义。 h_semi_prime为两个h_素数的积。输入h,求1到h之间有多少个h_semi_prime。
思路: 主要是刷选出h素数,可模仿 埃氏筛法 。最开始素数筛选有问题导致wrong answer
#include <iostream>#include <stdio.h>#include <algorithm>#include <string>#include <string.h>#include <math.h>using namespace std;const int maxn = 1e6 + 5 ;bool is_H_prime[maxn] , is_H_si[maxn] ;int H_prime[maxn] , p = 0 , H[maxn];void Prime(){ memset(is_H_prime , true , sizeof(is_H_prime)) ; for(int i = 5 ; i < maxn ; i += 4) { if(is_H_prime[i]) { H_prime[p++] = i ; for(int j = 5*i ; j < maxn ; j += 4*i ) //attention { is_H_prime[j] = false ; } /* for(int j = i + i ; j < maxn ; j += i) { if((j - 1)%4 == 0) { is_H_prime[j] = false ; } }*/ } }}void solve(){ memset(is_H_si , false , sizeof(is_H_si)) ; for(int i = 0 ; i < 166 ; i ++) { for(int j = i ; H_prime[j] <= maxn/H_prime[i] ; j ++) { int t = H_prime[i] * H_prime[j] ; if( t < maxn) is_H_si[t] = true ; } } int Count = 0 ; for(int i = 1 ; i < maxn ; i ++ ) { if (is_H_si[i]) Count ++ ; H[i] = Count ; }}int main(){ Prime() ; solve() ; // 打表,预处理 int number ; while(scanf("%d" , &number) != EOF && number) { printf("%d %d\n" , number , H[number]) ; } return 0;}
0 0
- poj3292 素数筛选
- POJ3292 Semi-prime H-numbers 素数筛选
- poj3292(筛选法)
- poj3292 变形的素数问题
- poj3292
- poj3292
- poj3292
- poj3292
- poj3292
- POJ3292
- POJ3292
- poj3292
- 素数筛选
- 筛选素数
- 素数筛选
- 筛选素数
- 素数筛选
- 筛选素数
- 自建网页项目-蚁族财富网-记录20
- Struts2拦截器详解
- Eclipse转Android Studio遇到的问题小结
- 时间
- Java之主函数——main函数
- poj3292 素数筛选
- mybatis和hibernate
- 用友uap开发nc65按钮配置
- win10 64位安装绿色版mysql-5.7.16-winx64
- Python中元组,列表,字典的区别
- 理解异方差
- 访问外网的方法
- Linux下的文件结构,及对应文件夹的作用
- Java Concurrency in Practice :基础知识(正确的同步 -- 客户端加锁)