poj3006 筛选法求素数模板(数论)
很显然这是一题有关于素数的题目。
注意数据的范围,爆搜超时无误。
这里要用到筛选法求素数。
筛选法求素数的大概思路是:
如果a这个数是一个质数,则n*a不是质数。
用一个数组实现就是:
memset(prime,true,sizeof(prime));
if (prime[i]) prime[i*j]=false;
部分程序如下:(朴素)
const max=;
bool prime[];
memset(prime,true,sizeof(prime));
for(i = ; i <= ::max ; i ++ )
{
for(j = ; j <= ::max/i ; j ++)
{
if(prime[i])
{
prime[i * j] = false;
}
}
}
之后将中间进行小小的优化:
我们知道偶数中,除了2,其他的都是合数。
所以就可以将i++ 和 j++改成i+=2,j+=2;
再将除2以外的偶数判为false;以及注意一下特殊的值: 1和0是false;(要记住,c++的数组是从0~max的,所以0要考虑在内)
优化后的程序如下:
const int max = ;
bool prime[]={false}; memset(prime,true,sizeof(prime));
for(i = ; i <= ; i += )
{
for(j = ; j <= ::max / i ; j += )
{
if(prime[i])
{
prime[i * j] = false;
}
}
}
for(i = ; i <= ::max; i += )
{
prime[i] = false;
}
prime[] = prime[] = false;
这样,这题就可以在我们拟好的素数表中找到第n个要求的素数。用一个简单的循环就可以搞定。
附上完整模板:
#include<iostream>
#include<cstring>
using namespace std;
const int max = ;
bool prime[]={false};
int main()
{
int i,a,d,n,j;
memset(prime,true,sizeof(prime));
for(i = ; i <= ; i += )
{
for(j = ; j <= ::max / i ; j += )
{
if(prime[i])
{
prime[i * j] = false;
}
}
}
for(i = ; i <= ::max; i += )
{
prime[i] = false;
}
prime[] = prime[] = false; while(cin >> a >> d >> n,a != && d != && n != )
{
j = ;
for (i = a; j < n; i += d)
{
if (prime[i])
{
j++;
}
}
cout << i - d << endl;
}
return ;
}
poj3006 筛选法求素数模板(数论)的更多相关文章
- Facebook Hacker Cup 2015 Round 1--Homework(筛选法求素数)
题意:给定A,B,K(A<=B)三个数,问在[A,B]范围内的数素数因子个数为K的个数. 题解:典型的筛选法求素数.首先建立一个保存素数因子个数的数组factorNum[],以及到n为止含有素数 ...
- PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数
PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数 ...
- java筛选法求素数
这本身没什么,代码一堆 发来纪念下而已 本来刚学习java,编写输出100以内的素数 对于我这个有代码运行性能洁癖的人(但是本身又不懂算法)来说,不能忍 于是看了些资料 参考: http://blog ...
- ny520 最大素因子 筛选法求素数
最大素因子时间限制:1000 ms | 内存限制:65535 KB难度:2 描述 GreyAnts最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序 ...
- ny24 素数距离的问题 筛选法求素数
素数距离问题时间限制:3000 ms | 内存限制:65535 KB难度:2 描述 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素 ...
- 筛选法求N以内的所有素数
素数:一个数只能被1和它本身整除的数.2是最小的素数 #include <iostream> using namespace std; #define NUM 100 ]; int mai ...
- 筛选法求n以内所有的素数
求n以内所有的素数? 筛选法:将2到n中所有的数都列出来,然后从2开始,先化掉所有2的倍数,然后每次从下一个剩下的数(必然是素数)开始,划掉其内所有的倍数,最后剩下来的数就都是素数 例:13 红色为 ...
- C/C++筛选法算素数
什么是求素数 )i在2到n-1之间任取一个数,如果n能被整除则不是素数,否则就是素数 普通枚举法: #include <iostream> #include <string> ...
- NYOJ--187--快速查找素数(筛选法,素数打表)
快速查找素数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个正整数数N ...
随机推荐
- 对于VS相关的插件
原文:对于VS相关的插件 本人使用这款IDE时间不长,但是很佩服其强大的功能. 编写代码时候的插件辅助,确实让人很舒服. 网上找了好多,有几个是很有用的,但是忘记了他们的网址,再次,总结下,也是给自己 ...
- hdu Color the ball
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 树状数组的 update的应用,逆序更新 代码: #include <stdio.h&g ...
- iOS开发之protocol和delegate
protocol--协议 协议是用来定义对象的属性,行为和用于回调的. 协议中有两个keyword@private和@optional,@private表示使用这个协议必需要写的方法,@op ...
- C#-面向对象的多态思想 ---ShinePans
总结: 多态是面向对象的核心.---------能够理解为一个方法,多种实现, 在这里能够用虚方法,抽象类,接口能够实现多态 1.首先利用接口来实现多态: 接口相当于"功能,"接口 ...
- nginx的五种负载算法模式
nginx 负载均衡5种配置方式 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight 指定轮询几率,weight和访问比率成正比 ...
- android意图传递参数返回结果(六)
例如,有两页a,b. a参数传递到页面b页面,b后,将获得的参数的处理页,然后将结果传回与参数的页面a. 1.a主页MainActivity的代码类型,如以下: private Button butt ...
- 那些必须要知道的Javascript
原文:那些必须要知道的Javascript JavaScript是前端必备,而这其中的精髓也太多太多,最近在温习的时候发现有些东西比较容易忽略,这里记录一下,一方面是希望自己在平时应用的时候能够得心应 ...
- asp.net读取CSV
原文:asp.net读取CSV 用Excel导了两天数据,各种问题,折磨客户也折磨了自己,以前没发现的问题一下子都暴露出来了 特意收集两篇Excel跟CSV读取相关的两篇文章 asp.net读取exc ...
- Bundle压缩JS和CSS
ASP.NET MVC之Bundle压缩JS和CSS 介绍Bundle之前先引用<淘宝技术这十年>中一段话,对Web前端稍微有点常识的人都应该知道,浏览器下一步会加载页面中用到的CSS.J ...
- C++ Primer 学习笔记_63_重载运算符和转换 --转换和类类型【上】
重载运算符和转换 --转换与类类型[上] 引言: 在前面我们提到过:能够用一个实參调用的位 unsignedchar 相同范围的值,即:0到255. 这个类能够捕获下溢和上溢错误,因此使用起来比内置u ...