2128: 素数检测 时间限制: 1 Sec  内存限制: 128 MB提交: 84  解决: 32[提交] [状态] [讨论版] [命题人:admin] 题目描述 在算法竞赛中你会遇到各种各样的有关素数的问题,今天你来解决一个最基础的问题:如何判定一个素数.对于给定的正整数p,若p非素数,输出-1若p是素数 输出 :{sigma(a^(p-1) % p) ,其中a的下界为1,上界为p-1}即: 输入 多实例测试,每组数据包含一个正整数p(p < 10^16).  输出 根据情况输出一个正整数,…
#include <cstdio> #include <ctime> #include <cmath> #include <algorithm> using namespace std; typedef long long ll; const int N = 108; const int S = 10; ll mult_mod(ll a, ll b, ll c) { a %= c; b %= c; ll ret = 0; while(b) { if(b&am…
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6440 这题主要是理解题意: 题意:定义一个加法和乘法,使得 (m+n)p = mp+np; 其中给定 p 为素数,m,n 为小于p的数: 费马小定理:am-1 ≡ 1(mod p); 故有 am ≡ a(mod p), 同理(a+b)m = a+b(mod p) = am + bm ; 所以原等式恒成立,不需要定义特别的加法和乘法,只需在原来的基础上取模即可: #include<iostream>…
                                                10200 - Prime Time 此题极坑(本菜太弱),鉴定完毕,9遍过. 题意:很简单的求一个区间[a,b]内满足i*i+i+41(i>=a&&i<=b,0<=a<=b<=10000.)是素数的数有多个,求出百分比. 思路:直接裸判就行了(竟然不超时),但结果要加上1e-8(are you kidding me?). 下面来说说我怎么跪了,开始也是直接裸判,我…
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1067 1067 - Combinations Given n different objects, you want to take k of them. How many ways to can do it? For example, say there are 4 items; you want to take 2 of them. So, you can do it 6…
There are N children in kindergarten. Miss Li bought them NNN candies. To make the process more interesting, Miss Li comes up with the rule: All the children line up according to their student number (1...N), and each time a child is invited, Miss Li…
G. Give Candies There are N children in kindergarten. Miss Li bought them N candies. To make the process more interesting, Miss Li comes up with the rule: All the children line up according to their student number (1...N) and each time a child is inv…
There are N children in kindergarten. Miss Li bought them N candies. To make the process more interesting, Miss Li comes up with the rule: All the children line up according to their student number (1...N), and each time a child is invited, Miss Li r…
最近在看RSA,找到一个一个大素数是好多加密算法的关键一步,而大素数无法直接构造,一般情况下都是生成一个随机数然后判断是不是素数.判断是否是素数的方法有好多,有的能够准确判断,比如可以直接因式分解(RSA的安全性就基于这是困难的),速度稍微快一点的对素数又有特殊要求,而Miller-Rabin素数检测法可以在一定概率上认为一个数是素数,以极小概率的错误换取时间.Miller-Rabin算法基于一个数如果是素数就满足费马小定理,即a^(n-1) ≡1(mod n),而如果满足此现象却不是素数就成为…
适用范围:较大数的较快素性判断 思路: 因为有好的文章讲解具体原理(见参考文章),这里只是把代码的大致思路点一下,读完了文章如果还有些迷糊,可以参考以下解释 原理是费马小定理:如果p是素数,则a^(p-1)%p==1,加上二次探测定理:如果p是一个素数,则x^2%p==1的解为,则x=1或者x=n-1. 因为有通过费马小定理的伪素数的概率不是充分小,在此基础上加以改进判断. 一次检测中: 主要是把一个数n的n-1分解成d*2^r的形式,其中d为奇数,正向过程是a^n%p如果是1,就继续分解a^(…