刚刚学了一种新的素数筛选法,效率比原先的要高一些,据说当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. Linux下编译PHP常见错误及解决方法

    1.configure: error: xml2-config not found. Please check your libxml2 installation.yum install libxml ...

  2. 委托在Smobiler自定义控件中运用

    委托(Delegate) C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delegate) 是存有对某个方法的引用的一种引用类型变量.可以将方法当作另一个方法的参数来进 ...

  3. python基本数据类型之数字类型和其相关运算

    数字(number) Python3 支持 int.float.bool.complex(复数). 在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long. ...

  4. 基于C#的机器学习--我应该接受这份工作吗-使用决策树

    决策树 要使决策树完整而有效,它必须包含所有的可能性.事件序列也必须提供,并且是互斥的,这意味着如果一个事件发生,另一个就不能发生. 决策树是监督机器学习的一种形式,因为我们必须解释输入和输出应该是什 ...

  5. 《Python 3网络爬虫开发实战中文》超清PDF+源代码+书籍软件包

    <Python 3网络爬虫开发实战中文>PDF+源代码+书籍软件包 下载: 链接:https://pan.baidu.com/s/18yqCr7i9x_vTazuMPzL23Q 提取码:i ...

  6. 《Python 3.5从零开始学》笔记-第8章 面向对象编程

    前几章包括开启python之旅.列表和元组.字符串.字典.条件和循环等语句.函数等基本操作.主要对后面几章比较深入的内容记录笔记. 第8章 面向对象编程 8.3深入类 #!/usr/local/bin ...

  7. 深入理解C#的装箱和拆箱

    个人理解(本质): 封箱是把值类型转换为引用类型 拆箱是把引用类型转换为值类型 封箱是把值类型转换为System.Object类型,或者转换为由值类型实现的接口类型: 例如: struct Mystr ...

  8. NetCore AutoMapper的封装

     需要引用AutoMapper的Nuget包  如果需要忽略某个字段就在字段上面打标签如下:  [IgnoreMap] public string IgnoreValue { get; set; } ...

  9. GreenPlum完全安装_GP5.11.3完整安装

    1 概述 1.1 背景 1.2 目标 1.3 使用对象 2 配置系统信息 2.1 配置系统信息,做安装Greenplum的准备工作 Greenplum 数据库版本5.11.3 2.1.1 Greenp ...

  10. MyBatis从入门到精通(十三):使用discriminator鉴别器映射

    最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解鉴别器映射discri ...