求素数个数的优化-LeetCode204】的更多相关文章

问题 计数质数 统计所有小于非负整数 n 的质数的数量. 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . 第一种解法容易想到但是会 超时 class Solution { public int countPrimes(int n) { int counter = 0; for (int i = 2; i < num; i++) { if (isPrime(i)){ // 是素数 counter++ counter++; } } re…
题意:给一个数n,返回小于n的素数个数. 思路:设数字 k =from 2 to sqrt(n),那么对于每个k,从k2开始,在[2,n)范围内只要是k的倍数的都删掉(也就是说[k,k2)是不用理的,若能被筛掉早就被筛了,保留下来的就是素数).最后统计一下[2,n)内有多少个还存在的,都是素数. 要注意,如果k已经被筛掉了,那么不用再用它来删别人了,因为已经被筛掉,那么现在比k2大的且是k的倍数,都已经被干掉了. class Solution { public: int countPrimes(…
How many prime numbers Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 14684    Accepted Submission(s): 5091 Problem Description   Give you a lot of positive integers, just to find out how many…
    Description: Count the number of prime numbers less than a non-negative number, n 提示晒数法: http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes https://primes.utm.edu/howmany.html 别人的代码: int countPrimes(int n) { if (n<=2) return 0; vector<bool> p…
本文是对 LeetCode Count Primes 解法的探讨. 题目: Count the number of prime numbers less than a non-negative number, n. 尽管题目并没有要我们写一个最优的算法,但是身为一个程序员,优化应该是一种习惯,在编程的过程中,随着思考进行优化.只要求我们满足给定的时间和空间即可. 如果你只能想出一个最简单的方法,难道你会有什么竞争力吗? 穷举 最开始我用的就是这个方法,可以说这是最简单的一种方法了,而且最开始,我…
POJ 3978 Primes(求范围素数个数) id=3978">http://poj.org/problem? id=3978 题意: 给你一个区间范围A和B,要你求出[A,B]内的素数个数.当中B<=100000. 分析: 首先我们求出2到10W的素数表.把每一个素数按从小到大的顺序保存在prime数组中.然后我们用二分查找找到A的下界和B的上界,然后用上界-下界即为素数个数. 程序实现用了两种筛选法来求素数表.两种筛选法都是基于每一个自然合数都能够分解为:最小素因子p*剩余部…
[本文出自天外归云的博客园] 题1:求m以内的素数(m>2) def find_all_primes_in(m): def prime(num): for i in range(2, num): if divmod(num, i)[1] == 0: return False return True print([i for i in range(2, m + 1) if prime(i)]) if __name__ == '__main__': find_all_primes_in(100) 我…
print 'Find prime number smaller then input number \n' print 'Please input a number:' import datetime begintime=datetime.datetime.now() number=raw_input() num=1 end=[] b=0 n=0 while num<int(number): div=1 while div<num: result=float(num)/div if floa…
/** 题目:Help Hanzo lightof 1197 链接:https://vjudge.net/contest/154246#problem/M 题意:求一段区间内素数个数,[l,r] 在 [1,1e9] 范围内.r-l<=1e5; 思路:采用和平常筛素数的方法.平移区间即可. */ #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #i…
D - Disjoint Set of Common Divisors Problem Statement Given are positive integers AA and BB. Let us choose some number of positive common divisors of AA and BB. Here, any two of the chosen divisors must be coprime. At most, how many divisors can we c…
//C语言:输入一个数,输出比这个数小的所有素数,并求出个数. #include<conio.h> #include<stdio.h> #include<stdlib.h> #define MAX 100 int fun(int lim, int aa[MAX]) { ; ; i <= lim; i++)//罗列每个数 { ; j < i; j++)//判断是否为质数(素数:只可以被1和本身整除,必须大于1) { ) break; } if (j >=…
要求: (1) 找出0-1000之间素数(2) 设f(n)表示0-n之间的素数个数,计算出当n=0,1,2,3,.....,997时f(n)的值,并写入文件 分析: 首先找素数使用一个效率较高的方法--Eratosthenes筛法,只要把1和不超过1000的正合数都删去.其原理为:由于正合数必有不可约数是小于等于其平方根的,只要首先求出1-1000平方根之间的全部不可约数,依次把这些不可约数之外的倍数也全部删去,剩下的正好就是不可约数.(参考<初等数论>) 其程序如下: /** * @para…
题目连接:http://www.spoj.com/problems/CNTPRIME/ #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #define lson rt<<1,L,mid #define rson rt<<1|1,mid+1,R /* 水题 题意:给出n个初始值,给出两种操作 0 x y v:将[x,y]的数改…
POJ:3006 很显然这是一题有关于素数的题目. 注意数据的范围,爆搜超时无误. 这里要用到筛选法求素数. 筛选法求素数的大概思路是: 如果a这个数是一个质数,则n*a不是质数. 用一个数组实现就是: memset(prime,true,sizeof(prime)); if (prime[i]) prime[i*j]=false; 部分程序如下:(朴素) ; ]; memset(prime,true,sizeof(prime)); ; i <= ::max ; i ++ ) { ; j <=…
素数总是一个比较常涉及到的内容,掌握求素数的方法是一项基本功. 基本原则就是题目如果只需要判断少量数字是否为素数,直接枚举因子2 ..N^(0.5) ,看看能否整除N. 如果需要判断的次数较多,则先用下面介绍的办法预处理. 一般的线性筛法 首先先介绍一般的线性筛法求素数 void make_prime() { memset(prime, , sizeof(prime)); prime[]=false; prime[]=false; ; ; i<N; i++) if (prime[i]) { pr…
算法训练 Torry的困惑(基本型) 时间限制:1.0s   内存限制:512.0MB      问题描述 Torry从小喜爱数学.一天,老师告诉他,像2.3.5.7……这样的数叫做质数.Torry突然想到一个问题,前10.100.1000.10000……个质数的乘积是多少呢?他把这个问题告诉老师.老师愣住了,一时回答不出来.于是Torry求助于会编程的你,请你算出前n个质数的乘积.不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值. 输入格式 仅包含一个正整数n,其中n…
#用filter求素数 #生成器,生成一个无限序列 def _odd_iter(): n=1 while True: n=n+2 yield n #筛选函数 def _not_divisible(n): return lambda x:x%n>0 #生成器,不断返回下一个素数 def primes(): yield 2 it = _odd_iter()#初始序列 while True: n=next(it)#返回序列的第一个数 yield n it = filter(_not_divisible…
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4548 Problem Description 小明对数的研究比较热爱,一谈到数,脑子里就涌现出好多数的问题,今天,小明想考考你对素数的认识. 问题是这样的:一个十进制数,如果是素数,而且它的各位数字和也是素数,则称之为“美素数”,如29,本身是素数,而且2+9 = 11也是素数,所以它是美素数. 给定一个区间,你能计算出这个区间内有多少个美素数吗?   Input 第一行输入一个正整数T,表示总共有T组…
  Carmichael Numbers  An important topic nowadays in computer science is cryptography. Some people even think that cryptography is the only important field in computer science, and that life would not matter at all without cryptography. Alvaro is one…
题意:给定A,B,K(A<=B)三个数,问在[A,B]范围内的数素数因子个数为K的个数. 题解:典型的筛选法求素数.首先建立一个保存素数因子个数的数组factorNum[],以及到n为止含有素数因子个数为k的二维数组sumNum[n][k]. factorNum能够由筛选法确定.初始化数组为0. 1. 从小到大遍历给定最大范围内的数,若遍历到数n时,factorNum[n]=0则说明这个数是素数(前面没有它的因子). 2. 然后通过添加n的倍数,来筛选出最大范围内含有素数因子n的数. sumNu…
素数个数的位数 Time Limit 1000ms Memory Limit 65536K description 小明是一个聪明的孩子,对数论有着非常浓烈的兴趣.他发现求1到正整数10n 之间有多少个素数是一个非常难的问题,该问题的难以决定于n 值的大小.如今的问题是,告诉你n的值,让你帮助小明计算小于10n的素数的个数值共同拥有多少位? input 输入数据有若干组,每组数据包括1个整数n(1 < n < 1000000000),若遇到EOF则处理结束. output 相应每组数据,将小于…
一般的线性筛法 genPrime和genPrime2是筛法求素数的两种实现,一个思路,表示方法不同而已. #include<iostream> #include<math.h> #include<stdlib.h> using namespace std; ; //素数表范围 ]; //标志一个数是否为素数 ]; //素数表,下标从0开始 ; //素数个数 void genPrime(int max) { memset(flag, true, sizeof(flag))…
题目链接 \(Description\) 给定\(n\),求\(1\sim n\)中的素数个数. \(2\leq n\leq10^{11}\). \(Solution\) Min_25筛.只需要求出\(g(n,|P|)\). 跑的好慢啊QAQ //5283ms 11.62M #include <cmath> #include <cstdio> #include <algorithm> typedef long long LL; const int N=317000<…
素数是只有1和本身能整除的整数.所以在求素数的时候,要将素数与1到素数本身中间的所有整数都相除,看是否有整除的数,如果有,那肯定不是素数了.但是从算法上考虑,为了减少重复量,开平方后面的数就不用相除了,因为a/b(平方数)=c(小一点的数),同样a/c=b.举例说明: 25,开平方以后是5,那么整除2~5就可以了,如果有满足条件的,就是素数. 这样做可以减少循环次数,素数是因子为1和本身, 如果数c不是素数,则还有其他因子,其中的因子,假如为a,b.其中必有一个大于sqrt(c) ,一个小于sq…
题目链接:https://www.nowcoder.com/acm/contest/141/H 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 Eddy has solved lots of problem involving calculating the number of coprime pairs within some range. This problem can be so…
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=117 Time Limit:1000ms Memory Limit:65536K Description 小明是一个聪明的孩子,对数论有着很浓烈的兴趣.他发现求1到正整数10n 之间有多少个素数是一个很难的问题,该问题的难以决定于n 值的大小.现在的问题是,告诉你n的值,让你帮助小明计算小于10n的素数的个数值共有多少位? Input 输入数据有若干组,每组数据…
埃氏筛法求素数和构造素数表求素数是一个道理. 首先,列出从2开始的所有自然数,构造一个序列: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ... 取序列的第一个数2,它一定是素数,然后用2把序列的2的倍数筛掉: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ... 取新序列的第一个数3,它一定是素数,然后用3把序列的3的倍…
#6235. 区间素数个数 题目描述 求 1∼n 1\sim n1∼n 之间素数个数. 输入格式 一行一个数 n nn . 输出格式 一行一个数,表示答案. 样例 样例输入 10 样例输出 4 样例解释 1 2,3,5,72,3,5,72,3,5,7 数据范围与提示 对于 100% 100\%100% 的数据,2≤n≤1011 2 \leq n \leq 10^{11}2≤n≤10​11​​. #include<iostream> #include<cstdio> #include…
先放普通代码: #include <iostream> using namespace std; void getPrime_1() { const int MAXN = 100; bool flag[MAXN]; int primes[MAXN / 3 + 1], pi=0; primes[pi++]=2; //2 是一个素数,先记录下来 int i, j; for(i=0;i<MAXN;++i)flag[i]=false;//全部置假,没访问一个,相应位置真 for (i = 3;…
\(\color{#0066ff}{ 题目描述 }\) 求 \(1\sim n\) 之间素数个数. \(\color{#0066ff}{输入格式}\) 一行一个数 n . \(\color{#0066ff}{输出格式}\) 一行一个数,表示答案. \(\color{#0066ff}{输入样例}\) 10 \(\color{#0066ff}{输出样例}\) 4 \(\color{#0066ff}{数据范围与提示}\) 对于 \(100\%\) 的数据,\(2 \leq n \leq 10^{11}…