刚刚学了一种新的素数筛选法,效率比原先的要高一些,据说当n趋近于无穷大时这个的时间复杂度趋近O(n)。本人水平有限,无法证明。

这是道水题,贴代码出来重点是欧拉筛选法。我把原来普通的筛选法贴出来。

//2013-11-07-22.30
//poj 2909
#include <stdio.h>
#include <string.h> const int maxn = (1<<15)+5;
bool vis[maxn];
int pr[3416];
int cnt = 1;
void getpr()
{
for (int i = 2; i < maxn; i++)
{
if (vis[i] == 0)
pr[cnt++] = i;
for (int j = 1; j < cnt; j++)
{
if (i*pr[j] > maxn)
break;
vis[i*pr[j]] = 1;
if (i%pr[j] == 0)
break;
}
}
}
//void getpr()
//{
// for (int i = 2; i < maxn; i++)
// {
// if (vis[i])
// continue;
// else
// pr[cnt++] = i;
// for (int j = i<<1; j < maxn; j += i)
// vis[j] = true;
// }
//}
int main()
{
int n;
getpr();
while (scanf("%d", &n) && n)
{
int m = n>>1;
int ans = 0;
for (int i = 1; i < cnt; i++)
{
if (pr[i] > m)
break;
if (vis[n-pr[i]] == 0)
ans++;
}
printf("%d\n", ans);
}
return 0;
}

我把vis改成int型,然后对代码稍微改了一下 ,增加了计算总共访问过多少次vis数组的功能,欧拉筛法共访问29258次,而普通筛分访问了80298次,明显效率更低一些,改动代码如下,有兴趣可以自己试试。

//2013-11-07-22.30
//poj 2909
#include <stdio.h>
#include <string.h> const int maxn = (1<<15)+5;
int vis[maxn];
int pr[3416];
int cnt = 1; //void getpr() //欧拉筛法
//{
// for (int i = 2; i < maxn; i++)
// {
// if (vis[i] == 0)
// pr[cnt++] = i;
// for (int j = 1; j < cnt; j++)
// {
// if (i*pr[j] > maxn)
// break;
// vis[i*pr[j]]++;
// if (i%pr[j] == 0)
// break;
// }
// }
//}
void getpr() //普通筛法
{
for (int i = 2; i < maxn; i++)
{
if (vis[i])
continue;
else
pr[cnt++] = i;
for (int j = i<<1; j < maxn; j += i)
vis[j]++;
}
}
int main()
{
int n;
getpr();
int sum = 0;
for (int i = 1; i < maxn; i++)
sum += vis[i];
printf("sum = %d\n", sum); while (scanf("%d", &n) && n)
{
int m = n>>1;
int ans = 0;
for (int i = 1; i < cnt; i++)
{
if (pr[i] > m)
break;
if (vis[n-pr[i]] == 0)
ans++;
}
printf("%d\n", ans);
}
return 0;
}

poj2909 欧拉素数筛选的更多相关文章

  1. uva 11426 线性欧拉函数筛选+递推

    Problem J GCD Extreme (II) Input: Standard Input Output: Standard Output Given the value of N, you w ...

  2. HDU - 4548-美素数 (欧拉素数筛+打表)

    小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识.  问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为"美素数&quo ...

  3. 2018 南京预选赛 J Sum ( 欧拉素数筛 、Square-free Number、DP )

    题目链接 题意 : 定义不能被平方数整除的数为 Square-free Number 定义 F(i) = 有几对不同的 a 和 b 使得 i = a * b 且 a .b 都是 Square-free ...

  4. 素数筛总结篇___Eratosthenes筛法和欧拉筛法(*【模板】使用 )

    求素数 题目描述 求小于n的所有素数的数量. 输入 多组输入,输入整数n(n<1000000),以0结束. 输出 输出n以内所有素数的个数. 示例输入 10 0 示例输出 4 提示 以这道题目为 ...

  5. (转载)O(N)的素数筛选法和欧拉函数

    转自:http://blog.csdn.net/dream_you_to_life/article/details/43883367 作者:Sky丶Memory 1.一个数是否为质数的判定. 质数,只 ...

  6. 素数的线性筛 && 欧拉函数

    O(n) 筛选素数 #include<bits/stdc++.h> using namespace std; const int M = 1e6 + 10 ; int mindiv[M] ...

  7. BZOJ 2818 Gcd(欧拉函数+质数筛选)

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 9108  Solved: 4066 [Submit][Status][Discu ...

  8. 素数判断-----埃氏筛法&欧拉筛法

    埃氏筛法 /* |埃式筛法| |快速筛选素数| |15-7-26| */ #include <iostream> #include <cstdio> using namespa ...

  9. 转载:Candy? 在线性时间内求出素数与欧拉函数

    转载自:http://www.cnblogs.com/candy99/p/6200660.html 2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MB ...

随机推荐

  1. Spring Boot:使用Rabbit MQ消息队列

    综合概述 消息队列 消息队列就是一个消息的链表,可以把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息,对消息队列有读权限的进程则可以 ...

  2. C语言版数据结构笔记

    现在把以前学的数据结构知识再理一遍,上机测试.首先最重要的是链表.在我看来,链表其实就是由一个个结构体连接而成的,创建一个链表有多种方式,头插法,尾插法等,这里采用的是尾插法.表述有不对的地方,欢迎更 ...

  3. SQL 对float类型列进行排序引发的异常

    车祸现场 要求:根据学分和完成时间获取前200名学员,当学分相同时,完成时间较早的排在前面 可以明显看到,完成时间为4.1号的记录排在了3.27号前面. 事故原因 float 表示近似数值,存在精度损 ...

  4. java-NIO-FileChannel(文件IO)

    Java NIO中的FileChannel是一个连接到文件的通道.可以通过文件通道读写文件. FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下. 对于文件的复制,平时我们都是使用输入 ...

  5. HDU 4057:Rescue the Rabbit(AC自动机+状压DP)***

    http://acm.hdu.edu.cn/showproblem.php?pid=4057 题意:给出n个子串,串只包含‘A’,'C','G','T'四种字符,你现在需要构造出一个长度为l的串,如果 ...

  6. POJ 3686:The Windy's(最小费用最大流)***

    http://poj.org/problem?id=3686 题意:给出n个玩具和m个工厂,每个工厂加工每个玩具有一个时间,问要加工完这n个玩具最少需要等待的平均时间.例如加工1号玩具时间为t1,加工 ...

  7. JS格式化JSON后的日期

    序列化后日期变成了 /Date(1494524134000+0800)\ 这种格式 不能正常显示了 但也不能为了这个吧所有服务的DateTime字段都改成String类型 于是找了一个JS的扩展方法来 ...

  8. JavaScript 之迭代方法

    前言:关于 JS 中为数组定义的迭代方法,我最开始是在<JavaScript高级程序设计>中学习的,然后...我并没有看懂,后来翻阅各个大佬的博客,稍微理解了那么一丢丢.以下就是我的一点见 ...

  9. C语言学习书籍推荐《学通C语言的24堂课》下载

    下载地址:点我 编辑推荐 <学通C语言的24堂课>:用持续激励培养良好习惯以良好习惯铸就伟大梦想——致亲爱的读者朋友在开始学习<学通C语言的24堂课>的同时,强烈建议读者朋友同 ...

  10. JavaScript-浏览器的三种弹窗方式

    //BOM 弹窗 //同步 阻断 alert("alert弹窗"); //返回布尔值 (是/否) var bcf = confirm("confirm弹窗"); ...