素数判定(给你两个数a、b,现在的问题是要判断这两个数组成的区间内共有多少个素数)

 1 #include<stdio.h>
 2 #include<math.h>
 3 int func(int x)//自定义函数实现寻找素数功能
 4 {
 5     int i, flag = 1;
 6     for (i = 2; i <= (int)sqrt((float)x); i++)    //取到平方根就好,(float)x,强制将int x型转化成float型,再将平方根转化为int型
 7     {
 8         if (x%i == 0)    //是合数,则标记
 9             flag = 0;
10     }
11     return flag;
12 }
13 int main(void)
14 {
15     int i, a, b, num,temp;
16     while (~scanf("%d%d", &a, &b))    //a到b之间的素数判定
17     {
18         num = 0;
19         if (a > b)
20         {
21             temp = a;
22             a = b;
23             b = temp;
24         }
25         for (i = a; i <= b; i++)
26         {
27             if (func(i) == 1)
28                 num++;    //记录素数个数
29         }
30         printf("%d\n", num);//输出
31     }
32     return 0;
33 }
时间: 2024-10-08 04:08:51

素数判定(给你两个数a、b,现在的问题是要判断这两个数组成的区间内共有多少个素数)的相关文章

BZOJ 2818: Gcd区间内最大公约数 为素数的对数(欧拉函数的应用)

传送门 2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 3649 Solved: 1605 [Submit][Status][Discuss] Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. Input 一个整数N Output 如题 Sample Input 4 Sample Output 4 HINT hint 对于样例(2,2),(2,4),(3,3),(4,

[算法]Miller Robbin素数判定

Miller Robbin素数判定 一.实现原理 我们以前都是怎么判断素数的呢: inline int is_prime(int n){ if(n==1) return 0; for(int i=2;i<=sqrt(n);i++){ if(n%i==0) return 0; } return 1; } 现在,我们希望更快的判断一个数是否为素数. 我们可以借助费马小定理来判断: 如果p是一个质数,而整数a不是p的倍数,则有 \[a^{p-1}\equiv 1\pmod p\] Miller Rob

[Miller-Rabin][CODEVS1702]素数判定2 解题报告

题面描述:判定一个数P∈[1,2^63-1]∩N是素数么. 按照朴素的判定素数方法,至少也需要O(P^0.5)的,但这道题就是霸气到连这样的时间复杂度都过不了的地步. 实在是不会做了,就学习了传说中的Miller-Rabin素数判定法. 两个引理: ①费马小定理: 设p为质数,且不满足p|a, 则a^(p-1)=a(mod p). 证: 又一个引理,若n与p互质,且a与p互质,则n*a与p互质. 这真的是一个看似很简单的引理,但它却意味着一些看似不那么简单的事情. 设A=(0,p)∩N,则 ①对

素数判定相关资料

素数(质数)的判定 (1)最基本素数判定方法大家熟悉,只用看看2到n(或n的平方根)之间有没有n的约数: #include<stdio.h> void main() { int i,n; scanf("%d",&n); for(i=2;i<n;i++) if(n%i==0)break; if(i<n||n==1)puts("No"); else puts("Yes"); } 此方法适用于判定较少数,数据量大时会超时

Miller-Rabin算法 codevs 1702 素数判定 2

转载自:http://www.dxmtb.com/blog/miller-rabbin/ 普通的素数测试我们有O(√ n)的试除算法.事实上,我们有O(slog³n)的算法. 定理一:假如p是质数,且(a,p)=1,那么a^(p-1)≡1(mod p).即假如p是质数,且a,p互质,那么a的(p-1)次方除以p的余数恒等于1.(费马小定理) 该定理的逆命题是不一定成立的,但是令人可喜的是大多数情况是成立的. 于是我们就得到了一个定理的直接应用,对于待验证的数p,我们不断取a∈[1,p-1]且a∈

利用辛达拉姆筛进行素数判定

1 常规判定方法 素数判定问题就是对给定的正整数n判定是否为素数.所谓素数,是指恰好有2个约数的整数.因为n的约数都不超过n,所以只需要检查2~n-1的所有整数是否整除n就能判定是不是素数.不过,我们还能进一步优化.如果d是n的约数,那么n/d也是n的约数.由n=d*n/d可知min(d,n/d),所以只需要检查2~的所有整数就足够了.此时,素数判定的复杂度为O().代码实现如下: int classic(long long a) { long long half=(long long)sqrt

数学#素数判定Miller_Rabin+大数因数分解Pollard_rho算法 POJ 1811&amp;2429

素数判定Miller_Rabin算法详解: http://blog.csdn.net/maxichu/article/details/45458569 大数因数分解Pollard_rho算法详解: http://blog.csdn.net/maxichu/article/details/45459533 然后是参考了kuangbin的模板: http://www.cnblogs.com/kuangbin/archive/2012/08/19/2646396.html 模板如下: //快速乘 (a

素数判定 AC 杭电

素数判定 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 87861    Accepted Submission(s): 30699 Problem Description 对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数. Input 输入数

吉比特_笔试_区间内素数个数

import java.util.Scanner; /** 输入M.N,1 < M < N < 1000000,求区间[M,N]内的所有素数的个数.素数定义:除了1以外,只能被1和自己整除的自然数称为素数 输入描述: 两个整数M,N 输出描述: 区间内素数的个数 示例1 输入 2 10 输出 4 * @author zhaoz * */ public class getMtoNPrime { public static void getPrimeCount(int m, int n) {