判断素数

UVA 10395 素数筛

孤街醉人 提交于 2019-11-28 21:44:05
Twin Primes Twin primes are pairs of primes of the form (p; p + 2). The term \twin prime" was coined by Paul Stckel (1892-1919). The rst few twin primes are (3, 5), (5, 7), (11, 13), (17, 19), (29, 31), (41, 43). In this problem you are asked to nd out the S-th twin prime pair where S is an integer that will be given in the input. Input The input will contain less than 10001 lines of input. Each line contains an integers S (1 S 100000), which is the serial number of a twin prime pair. Input le is terminated by end of le. Output For each line of input you will have to produce one line of output

对 黎曼猜想 的 简单 看法

a 夏天 提交于 2019-11-28 20:48:02
这 是 我在 一个 帖子 里的 回复 , 原帖地址 : 《千年难题——七个悬赏1000000美元的数学问题》 http://tieba.baidu.com/p/6235630502 , 我的 回复 如下: 黎曼猜想 其实 根本 不用 证明, 现在有 很多 定理 都是 以 黎曼猜想 为 基础 推导出来的, 这些 定理 都 在 用, 用的好好的, 所以 现在的 问题 不是 证明 黎曼猜想 , 而是 用 黎曼猜想 能 干什么, 比如 知道 素数 的 分布? 我想 并不能 精确 的 知道 素数 的 分布, 那 能不能 根据 黎曼猜想 判断 一个 大数 是否 是 素数 ? 我想也不能, 哥德巴赫猜想 说 一个 偶数 可以 表示为 2 个 素数 的 和, 那 给定 一个 偶数, 根据 黎曼猜想 能 求得 和 为 该 偶数 的 所有 素数对 吗? 我想也不能 。 那 证明 黎曼猜想 有什么用? 所以 问题 的 重点 在于 黎曼猜想 能 用来 做什么, 只要 黎曼猜想 能 用来 解决问题 , 先用着 就 行了 。 如果 黎曼猜想 不能 解决 某个 问题, 那 把 黎曼猜想 证明了 也没用, 还是 不能 解决这个问题 。 来源: https://www.cnblogs.com/KSongKing/p/11427333.html

基础回顾--素数筛,欧拉函数

谁说胖子不能爱 提交于 2019-11-28 13:41:38
欧拉筛法:   直接判断素数耗时,换个角度标记非素数,那么没有被标记的就是素数。   关键点: 除2之外的偶数必然不是素数,所以 只需要遍历奇数 寻找0-N范围中的素数时,遍历只需要从 2-->sqrt(N+0.5) ,因为sqrt(N+0.5)之后的数必然在第二层的循环中标记过。 二层循环的意思:一层循环找到了素数prime,则要 将prime的所有倍数都筛去 。注意从prime*prime开始筛,因<prime*prime的数必然能被之后找到的prime的倍数筛去。 const int maxn = 10004; bool vis[maxn]; int prime[maxn], cnt; void sort_prime() { prime[cnt++] = 2; int m = (int) sqrt(maxn + 0.5); for(int i=3; i<m; i+=2) { if(!vis[i]) { prime[cnt++] = i; for(int j=i*i; j<maxn; j+=i) { vis[j] = true; } } } return; } 欧拉函数:    求解所有<=n且与n互素的数的总数 ,特别的 phi(1) = 1。 (phi其实是数学符号的谐音~)   根据性质 phi(n) = n*(1-1/p1)*(1-1p2)...*(1-1/pk)

素数筛选

╄→гoц情女王★ 提交于 2019-11-28 03:57:58
经典: int isprime(int n) { int i; if(n<=1) return 0; for(i=2;i<=sqrt(n);i++) if(n%i==0) return 0; return 1; } 显然如果要判断一定范围内的素数,这种算法很慢。 埃拉托斯特尼(Eratosthenes)筛法 int flag[maxn+5]={1,1}; //if(flag[i]=0) i为素数 void isprime() { int i,j; memset(flag,0,sizeof(flag)); for(i=2;i<=sqrt(N);i++) { if(!flag[i]) { for(j=i*i;j<=N;j+=i) flag[j]=1; } } } 欧拉(Euler)筛法 int flag[maxn+5]={1,1},prime[maxn+5]; //if(flag[i]=0) i为素数 void isprime() { int i,j,cnt=0; memset(flag,0,sizeof(flag)); for(i=2;i<=maxn;i++) { if(!flag[i]) prime[cnt++]=i; for(j=0;j<cnt&&prime[j]*i<=maxn;j++) { flag[prime[j]*i]=1; if(i%prime[j]==0) break

poj3641(学习了)

半世苍凉 提交于 2019-11-28 02:13:15
素数的测试: 费尔马小定理:如果p是一个素数,且0<a<p,则a^(p-1)%p=1. 利用费尔马小定理,对于给定的整数n,可以设计素数判定算法,通过 计算d=a^(n-1)%n来判断n的素性,当d!=1时,n肯定不是素数,当d=1时,n很可能是素数. 二次探测定理:如果n是一个素数,且0<x<p,则方程x^2%p=1的解为:x=1或 x=p-1. 利用二次探测定理,可以再利用费尔马小定理计算a^(n-1)%n的过程 中增加对整数n的二次探测,一旦发现违背二次探测条件,即得出n不是素数的结论. 如果n是素数,则(n-1)必是偶数,因此可令(n-1)=m*(2^q),其中m是正奇数(若n是偶数,则上面的m*(2^q)一定可以分解成一个正奇数乘以2的k次方的形式),q是非负整数,考察下面的测试: 序列: a^m%n; a^(2m)%n; a^(4m)%n; …… ;a^(m*2^q)%n 把上述测试序列叫做Miller测试,关于Miller测试,有下面的定理: 定理:若n是素数,a是小于n的正整数,则n对以a为基的Miller测试,结果为真. Miller测试进行k次,将合数当成素数处理的错误概率最多不会超过4^(-k). 借鉴别人的,虚心学习 #include < iostream > #include < ctime > #include < cstdlib > #include

区间素数筛

那年仲夏 提交于 2019-11-28 01:40:42
题目描述 A positive integer is called a "prime-factor prime" when the number of its prime factors is prime. For example, 12 is a prime-factor prime because the number of prime factors of 12=2×2×3 is 3, which is prime. On the other hand, 210 is not a prime-factor prime because the number of prime factors of 210=2×3×5×7 is 4, which is a composite number. In this problem, you are given an integer interval [l,r]. Your task is to write a program which counts the number of prime-factor prime numbers in the interval, i.e. the number of prime-factor prime numbers between l and r, inclusive. 输入 The input

大素数判定

空扰寡人 提交于 2019-11-28 01:28:40
START 判断一个数是不是素数可以直接暴力或者是素数筛。 但是对于一个特别大的数,直接用素数筛也有可能TLE。 这个时候就要想点别的办法: 1. 筛选法+试除法 首先用素数筛筛出[2,sqrt(n)+1]的素数,然后用这些素数来判断能不能整除n,如果可以,那么n一定是合数,如果都不行,那么n是素数。 void olas()//欧拉筛 { int i,j; num=1; memset(u,true,sizeof(u)); for(int i=2;i<=1000000;i++) { if(u[i]) su[num++]=i; for(int j=1;j<num;j++) { if(i*su[j]>1000000) break; u[i*su[j]]=false; if(i%su[j]==0) break; } } } 这里使用的是欧拉筛。 筛出素数后一个for循环结束。 2.Miller_Rabin方法 和费马小定理有关的方法。 费马小定理:a^(p-1)=1 (mod p)。a,p互质。 如果a,p互质,那么一定有费马小定理成立,但是反之未必! 但是如果有非常多个a,都和我们要判定的p满足费马小定理,那么我们认为这个p很有可能是素数或者伪素数。 我们把可以满足上式的但却不是质数的p称为伪素数。 既然a取足够多就可以侧面反映p大概率是素数,那么我们就枚举足够多有代表性的a来验算。

宇宙

江枫思渺然 提交于 2019-11-27 22:50:46
前两天在看素数的相关资料,发现这个还真个密一样的东西。。 素数的分布现在还是个密,现目前只有通过简单的判断的方式进行递归式的查找 想想也是这样的,现在的数据的算术计算都是积累在乘除法上面的,比如说指数呀,微积分呀一大堆,如果离开了乘除法,然并卵。。 出现了素数这种乘除法的死角的情况,我们现在确一直在乘除法上面突破,额,想想都难。 本人认为突破这个问题,应该是承认如今算术上乘除法的缺点,寻找新的算术法则。。。 我能力有限这个问题只是吱吱声。。。 现在还有个问题,就是宇宙空间的问题,感觉也是很纠结的,为啥大佬们都在想把时间加在公式上,相对定律用得飞起,但是并没有发现新空间,还迎来很多不可解决的问题。。 这就将宇宙这些定义为未知之谜。。 为什么就不换一个角度看问题,走不通的死胡同,偏偏要去凿出一条通路,这不是很难吗,后人还叫它歪门邪道。。 当想着上面的素数的问题,我我突然想起一个问题,那就是我们的空间是三维的,我们目前发现了的,在三维空间,我们很好建模什么的。碰巧发现质数2 3 5... 的序列 我的猜想是,下一个有效基数应该是五维或者更高,而不是按照常规的四维。。。 至于三维为什么突然就添加了两维空间,我感觉这是这是三维空间的一个基础,我感觉这两维可能是能量和物质。。。 又或者现在我们三维空间本来定义就有误,我感觉三维有点牵强,我们人类的感官有很大的可能蒙蔽了事物的真实是发展。。

信息学奥赛C++语言:素数的判定

萝らか妹 提交于 2019-11-27 22:03:37
【题目描述】 输入一个正整数,判断其是否为素数。如果是,则输出“prime”;否则,输出“not prime” 。 【输入】 一行一个正整数 n,2≤n≤10^7 。 【输出】 一行一个字符串。 【输入样例】 8 【输出样例】 not prime 代码 #include<cstdio> using namespace std; int a; int main() { scanf("%d",&a); for(int i=2;i<a;i++) if(a%i==0) { printf("not prime"); return 0; } printf("prime"); return 0; } 来源: https://blog.csdn.net/zsbailong/article/details/99759386

素数:(x,y)区间内的素数有哪些

大兔子大兔子 提交于 2019-11-27 14:27:55
素数又称质数:一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数; 数的个数是无穷的。 欧几里得 的《 几何原本 》中有一个经典的证明。它使用了证明常用的方法: 反证法 。具体证明如下:假设质数只有有限的n个,从小到大依次排列为p 1 ,p 2 ,……,p n ,设N=p 1 ×p 2 ×……×p n ,那么, 是素数或者不是素数。如果 为素数,则 要大于p 1 ,p 2 ,……,p n ,所以它不在那些假设的素数集合中。 编程思路:1,先判断一个数是不是素数 2,再遍历(x,y)区间内的素数一一列出来 def isprime (n): for i in range(2,n): if n % i == 0 : return False else : return True print(isprime(7)) #结果:True def prime_n2m (n,m): L =[] for x in range(n,m): if isprime(x) == True : L.append(x) return L print(prime_n2m(10,20)) #结果:[11, 13, 15, 17, 19] 来源: https://www.cnblogs.com/xiaoliangliu86/p/11367214.html