【快速判断素数,10^9】

看到了一个很神的模板,具体什么意思还不理解,先马了再研究~

 1 bool prime (long long num)
 2 {
 3     if (num == 2 || num == 3 || num == 5)
 4         return true;
 5     if (num % 2 == 0 || num % 3 == 0 || num % 5 == 0 || num == 1)
 6         return false;
 7
 8     long long c = 7;
 9     int maxc = (int)(sqrt (num));
10     while (c <= maxc)
11     {
12         if (num % c == 0)
13             return false;
14         c += 4;
15         if (num % c == 0)
16             return false;
17         c += 2;
18         if (num % c == 0)
19             return false;
20         c += 4;
21         if (num % c == 0)
22             return false;
23         c += 2;
24         if (num % c == 0)
25             return false;
26         c += 4;
27         if (num % c == 0)
28             return false;
29         c += 6;
30         if (num % c == 0)
31             return false;
32         c += 2;
33         if (num % c == 0)
34             return false;
35         c += 6;
36     }
37     return true;
38 }  
时间: 2024-10-29 00:28:45

【快速判断素数,10^9】的相关文章

快速判断素数

以前我在判断素数上一直只会 sqrt(n) 复杂度的方法和所谓的试除法(用sqrt(n)以内的素数来除). 现在我发现其实还有一种方法叫做费马小定理. 有关请见 http://baike.baidu.com/link?url=1BurQrmJP3j9QiD4OnA2X3TAbSSCPvTgbaqbo6qSQPVSuXLjVe-lL2SNi6N5wblwJFrIJs41pmDbCZ6z9je4h_: 代码如下: llg ch(llg a,llg b){ llg now=a,ans; while(b

Codeforces Round #324 (Div. 2) (快速判断素数模板)

蛋疼的比赛,当天忘了做了,做的模拟,太久没怎么做题了,然后C题这么简单的思路却一直卡到死,期间看了下D然后随便猜了下,暴力了下就过了. A.找一个能被t整除的n位数,那么除了<=10以外,其他都可以用长度为n的10或100,1000 ... 来往上加几个数而得到 #include <iostream> #include <stdio.h> #include <set> #include <algorithm> #include <string.h

————————————————素数的快速判断方法————————————————————

1:   当n>=6   且n-1和n+1是孪生素数的话那么n一定是6的倍数. 证明:因为n-1和n+1为素数----① 所以n-1和n+1为奇数----② 所以n是偶数是2的倍数--③ 假设n不是3的倍数,得: n=3x+1或n=3x+2, 如果n=3x+1则n-1=3x这和①违背所以n≠3x+1 如果n=3x+2,zen+1=3(x+1)与①违背 所以假设不成立,既n是3的倍数又有②结论则n是6的倍数. 由上面的规律可以推出下面的结论: 如x>=1且n=6x+1或n=6x+1,那么n一定不

HDU 2138 How many prime numbers(Miller_Rabin法判断素数 【*模板】 用到了快速幂算法 )

How many prime numbers Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12955    Accepted Submission(s): 4490 Problem Description Give you a lot of positive integers, just to find out how many pr

UVA - 10006 - Carmichael Numbers (快速幂+素数判断)

题目传送:UVA - 10006 思路:就是快速幂暴力过去就行了,然后要注意点细节,就是快速幂的时候会爆int,然后就是先判断是否为素数,是素数就直接输出结果is normal,不然会超时 AC代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #include <queue> #inclu

如何判断素数

在OI与密码学等各个方面,我们经常会遇到需要判断素数的情况.这个问题看似简单,实则不然.判素就像是排序,只会快排是不能走遍天下的,想要成为一名神犇,就需要接触更多的算法. 一:什么是素数 素数,也可以叫做质数.如果一个大于1的自然数,除去1和他本身,不能被其他数字整除,那么他就是一个素数.任何一个大于1的自然数,要么是素数,要么是可以写做一堆素数相乘. 二:素数的性质 (1)质数p的约数只有两个:1和p. (2)初等数学基本定理:任一大于1的自然数,要么本身是质数,要么可以分解为几个质数之积,且

NYOJ 快速查找素数

快速查找素数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个正整数数N(N<=2000000) 但N为0时结束程序. 测试数据不超过100组 输出 将2~N范围内所有的素数输出.两个数之间用空格隔开 样例输入 5 10 11 0 样例输出 2 3 5 2 3 5 7 2 3 5 7 11 #include<cstdio> #include<cstdlib>

判断素数类问题ACing

1,判断正整数m是否为素数 int i,m; printf("Enter a number:"); scanf("%d",&m); for(i=2;i<=m/2;i++) if(m%i == 0) break; //若m能被某个i整除,则m不是素数,提前结束循环 if(i > m/2&&m != 1) //若循环正常结束,说明m不能被任何一个i整除 printf("%d is a prime number!\n"

快速查找素数

快速查找素数 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 现在给你一个正整数N,要你快速的找出在2.....N这些数里面所有的素数. 输入 给出一个正整数数N(N<=2000000) 但N为0时结束程序. 测试数据不超过100组 输出 将2~N范围内所有的素数输出.两个数之间用空格隔开 样例输入 5 10 11 0 样例输出 2 3 5 2 3 5 7 2 3 5 7 11 来源 经典题 上传者 路过这 素数打表.提交开始超时.改成c语言的就过了 #includ