刚刚学了一种新的素数筛选法,效率比原先的要高一些,据说当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. 一篇文章概括 Java Date Time 的使用

    本文目的:掌握 Java 中日期和时间常用 API 的使用. 参考:Jakob Jenkov的英文教程Java Date Time Tutorial 和 JavaDoc 概览 Java 8 新增 AP ...

  2. 如何把设计稿中px值转化为想要的rem值

    首先我们需要的是把尺寸转化为rem值 假如 设计稿中的是 200px*200px的图片 移动端的设计图尺寸一般是640*750; 第一步.  把图片分为若干份(好算即可),每一份的大小就是rem的单位 ...

  3. TCP/IP 第一章

    1,tcp/ip协议族作用:连接互联网中的计算机,并使其通信.可以想象互联网的计算机有不同的操作系统,如linux.unix.bsd.srv.windows.mac等.这么多操作系统对tcp/ip的实 ...

  4. python的比较关系运算符和逻辑运算符

    比较运算符 运算符 描述 示例 == 检查两个操作数的值是否相等,如果是则条件变为真. 如a=2,b=2则(a == b) 为 true. != 检查两个操作数的值是否相等,如果值不相等,则条件变为真 ...

  5. C语言实现-航空订票系统(飞机订票系统)

    开发环境:CodeBlocks 开发语言:C 实现功能:登录,订票,退票 数据存储:文本读写 涉及文件: ​ 相关文件下载: 码云:https://gitee.com/ikaros-521/c_pro ...

  6. 剑指offer第二版-7.重建二叉树

    描述:输入某二叉树的前序遍历和中序遍历结果,重建该二叉树.假设前序遍历或中序遍历的结果中无重复的数字. 思路:前序遍历的第一个元素为根节点的值,据此将中序遍历数组拆分为左子树+root+右子树,前序遍 ...

  7. Spring Cloud Alibaba | Sentinel: 服务限流基础篇

    目录 Spring Cloud Alibaba | Sentinel: 服务限流基础篇 1. 简介 2. 定义资源 2.1 主流框架的默认适配 2.2 抛出异常的方式定义资源 2.3 返回布尔值方式定 ...

  8. 微信小程序 textarea 层级过高的解决方式

    建立一个新的textarea 组件代替原生textarea ,废话不多说,上代码 <template> <view class="ui-textarea"> ...

  9. TF项目实战(SSD目标检测)-VOC2007

    TF项目实战(SSD目标检测)-VOC2007 训练好的模型和代码会公布在网上: 步骤: 1.代码地址:https://github.com/balancap/SSD-Tensorflow 2.解压s ...

  10. 洛谷P1396 营救 题解

    题目:https://www.luogu.org/problemnew/show/P1396 分析: 这其实一看就是一个最短路的近似模板的题目,但我们要注意到两个区之间可能会有多条道路,所以说我们只需 ...