poj2909 欧拉素数筛选
刚刚学了一种新的素数筛选法,效率比原先的要高一些,据说当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 欧拉素数筛选的更多相关文章
- uva 11426 线性欧拉函数筛选+递推
Problem J GCD Extreme (II) Input: Standard Input Output: Standard Output Given the value of N, you w ...
- HDU - 4548-美素数 (欧拉素数筛+打表)
小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识. 问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为"美素数&quo ...
- 2018 南京预选赛 J Sum ( 欧拉素数筛 、Square-free Number、DP )
题目链接 题意 : 定义不能被平方数整除的数为 Square-free Number 定义 F(i) = 有几对不同的 a 和 b 使得 i = a * b 且 a .b 都是 Square-free ...
- 素数筛总结篇___Eratosthenes筛法和欧拉筛法(*【模板】使用 )
求素数 题目描述 求小于n的所有素数的数量. 输入 多组输入,输入整数n(n<1000000),以0结束. 输出 输出n以内所有素数的个数. 示例输入 10 0 示例输出 4 提示 以这道题目为 ...
- (转载)O(N)的素数筛选法和欧拉函数
转自:http://blog.csdn.net/dream_you_to_life/article/details/43883367 作者:Sky丶Memory 1.一个数是否为质数的判定. 质数,只 ...
- 素数的线性筛 && 欧拉函数
O(n) 筛选素数 #include<bits/stdc++.h> using namespace std; const int M = 1e6 + 10 ; int mindiv[M] ...
- BZOJ 2818 Gcd(欧拉函数+质数筛选)
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 9108 Solved: 4066 [Submit][Status][Discu ...
- 素数判断-----埃氏筛法&欧拉筛法
埃氏筛法 /* |埃式筛法| |快速筛选素数| |15-7-26| */ #include <iostream> #include <cstdio> using namespa ...
- 转载:Candy? 在线性时间内求出素数与欧拉函数
转载自:http://www.cnblogs.com/candy99/p/6200660.html 2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB ...
随机推荐
- html、jsp页面标签的遍历
应用场景:最近的项目中二级子页面遍历生成.操作表格比较多,记录一下一直用的遍历方法. 一般此类表格都是通过ajax请求数据,然后从callbackFunction中获取数据集合,遍历生成表: eg: ...
- Mysql事务隔离级别和锁机制
一.Spring支持四种事务隔离级别: 1.ISOLATION_READ_UNCOMMITTED(读未提交):这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据. 2.ISOLAT ...
- Go - Slice 切片
概述 切片是一种动态数组,比数组操作灵活,长度不是固定的,可以进行追加和删除. len() 和 cap() 返回结果可相同和不同. 声明切片 //demo_7.go package main impo ...
- python多线程爬取图片实例
今天试着把前面那个爬取图片的爬虫改成了多线程爬取,虽然最后可以爬取存储图片了,但仍存在一些问题.网址还是那个网址https://www.quanjing.com/category/1286521/1. ...
- hive 常用的 join 操作 实例
test_a 表 id value 1 java 2 python 3 c++ test_b 表 id value 1 java 2 go 3 php 4 c++ 1. join 计算的是笛卡尔积,不 ...
- 微服务-springboot热部署
spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. IDEA进行热 ...
- 正确写网站title、keywords、description
一.title title,也就是标题,是在浏览器上面显示出来的,方便用户了解这个页面的内容;特别是搜索引擎判断你网页内容的主要根据.搜索引擎就很大部分是依靠网站title来判断你网站是关于什么内容的 ...
- Codeforces 777E:Hanoi Factory(贪心+栈)
http://codeforces.com/problemset/problem/777/E 题意:给出n个环状圆柱,每个圆环有一个内半径a,外半径b,和高度h,只有外半径bj <= bi并且b ...
- Google 的 Java 编码规范,参考学习!
这份文档是 Google Java 编程风格规范的完整定义.当且仅当一个 Java 源文件符合此文档中的规则, 我们才认为它符合 Google 的 Java 编程风格. 与其它的编程风格指南一样,这里 ...
- Abnormal build process termination IDEA启动报错
报错如下: Error:Abnormal build process termination: "C:Program FilesJavajdk1.11.0_1injava" -Xm ...