POJ:3006

很显然这是一题有关于素数的题目。

注意数据的范围,爆搜超时无误。

这里要用到筛选法求素数。

筛选法求素数的大概思路是:

如果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 筛选法求素数模板(数论)的更多相关文章

  1. Facebook Hacker Cup 2015 Round 1--Homework(筛选法求素数)

    题意:给定A,B,K(A<=B)三个数,问在[A,B]范围内的数素数因子个数为K的个数. 题解:典型的筛选法求素数.首先建立一个保存素数因子个数的数组factorNum[],以及到n为止含有素数 ...

  2. PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数

    PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数 ...

  3. java筛选法求素数

    这本身没什么,代码一堆 发来纪念下而已 本来刚学习java,编写输出100以内的素数 对于我这个有代码运行性能洁癖的人(但是本身又不懂算法)来说,不能忍 于是看了些资料 参考: http://blog ...

  4. ny520 最大素因子 筛选法求素数

    最大素因子时间限制:1000 ms  |  内存限制:65535 KB难度:2 描述 GreyAnts最近正在学习数论中的素数,但是现在他遇到了一个难题:给定一个整数n,要求我们求出n的最大素因子的序 ...

  5. ny24 素数距离的问题 筛选法求素数

    素数距离问题时间限制:3000 ms  |  内存限制:65535 KB难度:2 描述    现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度.如果左右有等距离长度素 ...

  6. 筛选法求N以内的所有素数

    素数:一个数只能被1和它本身整除的数.2是最小的素数 #include <iostream> using namespace std; #define NUM 100 ]; int mai ...

  7. 筛选法求n以内所有的素数

    求n以内所有的素数? 筛选法:将2到n中所有的数都列出来,然后从2开始,先化掉所有2的倍数,然后每次从下一个剩下的数(必然是素数)开始,划掉其内所有的倍数,最后剩下来的数就都是素数 例:13  红色为 ...

  8. C/C++筛选法算素数

    什么是求素数 )i在2到n-1之间任取一个数,如果n能被整除则不是素数,否则就是素数 普通枚举法: #include <iostream> #include <string> ...

  9. NYOJ--187--快速查找素数(筛选法,素数打表)

    快速查找素数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数.   输入 给出一个正整数数N ...

随机推荐

  1. 对于VS相关的插件

    原文:对于VS相关的插件 本人使用这款IDE时间不长,但是很佩服其强大的功能. 编写代码时候的插件辅助,确实让人很舒服. 网上找了好多,有几个是很有用的,但是忘记了他们的网址,再次,总结下,也是给自己 ...

  2. hdu Color the ball

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 树状数组的  update的应用,逆序更新 代码: #include <stdio.h&g ...

  3. iOS开发之protocol和delegate

     protocol--协议 协议是用来定义对象的属性,行为和用于回调的.     协议中有两个keyword@private和@optional,@private表示使用这个协议必需要写的方法,@op ...

  4. C#-面向对象的多态思想 ---ShinePans

    总结: 多态是面向对象的核心.---------能够理解为一个方法,多种实现, 在这里能够用虚方法,抽象类,接口能够实现多态 1.首先利用接口来实现多态: 接口相当于"功能,"接口 ...

  5. nginx的五种负载算法模式

    nginx 负载均衡5种配置方式 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight  指定轮询几率,weight和访问比率成正比 ...

  6. android意图传递参数返回结果(六)

    例如,有两页a,b. a参数传递到页面b页面,b后,将获得的参数的处理页,然后将结果传回与参数的页面a. 1.a主页MainActivity的代码类型,如以下: private Button butt ...

  7. 那些必须要知道的Javascript

    原文:那些必须要知道的Javascript JavaScript是前端必备,而这其中的精髓也太多太多,最近在温习的时候发现有些东西比较容易忽略,这里记录一下,一方面是希望自己在平时应用的时候能够得心应 ...

  8. asp.net读取CSV

    原文:asp.net读取CSV 用Excel导了两天数据,各种问题,折磨客户也折磨了自己,以前没发现的问题一下子都暴露出来了 特意收集两篇Excel跟CSV读取相关的两篇文章 asp.net读取exc ...

  9. Bundle压缩JS和CSS

    ASP.NET MVC之Bundle压缩JS和CSS 介绍Bundle之前先引用<淘宝技术这十年>中一段话,对Web前端稍微有点常识的人都应该知道,浏览器下一步会加载页面中用到的CSS.J ...

  10. C++ Primer 学习笔记_63_重载运算符和转换 --转换和类类型【上】

    重载运算符和转换 --转换与类类型[上] 引言: 在前面我们提到过:能够用一个实參调用的位 unsignedchar 相同范围的值,即:0到255. 这个类能够捕获下溢和上溢错误,因此使用起来比内置u ...