1702 素数判定 2
2016-07-10 20:38
330 查看
1702 素数判定 2
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 钻石 Diamond
题目描述 Description
一个数,他是素数么?
设他为P满足(P<=263-1)
输入描述 Input Description
P
输出描述 Output Description
Yes|No
样例输入 Sample Input
2
样例输出 Sample Output
Yes
数据范围及提示 Data Size & Hint
算法导论——数论那一节
注意Carmichael Number
题目数据太大,筛法绝对爆,所以就用费马小定理,简单搞定。
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 钻石 Diamond
题目描述 Description
一个数,他是素数么?
设他为P满足(P<=263-1)
输入描述 Input Description
P
输出描述 Output Description
Yes|No
样例输入 Sample Input
2
样例输出 Sample Output
Yes
数据范围及提示 Data Size & Hint
算法导论——数论那一节
注意Carmichael Number
题目数据太大,筛法绝对爆,所以就用费马小定理,简单搞定。
#include<cstdio> #include<iostream> using namespace std; typedef unsigned long long ll; int pp[]={2,3,5,7,11,13,17,19,23,29}; ll p; /*慢速乘法*/ ll mul(ll a,ll b){ ll ans=0; for(ll i=a;i;i>>=1){ if(i&1) ans=(ans+b)%p; b=(b+b)%p; } return ans%p; } /*快速幂*/ ll mull(ll a,ll b){ ll ans=1; for(ll i=a;i;i>>=1){ if(i&1) ans=mul(ans,b)%p; b=mul(b,b)%p; } return ans%p; } bool check(){ if(p<2||p&1==0) return 0; if(p==2) return 1; for(ll i=0;i<10;i++){ if(mull(p-1,pp[i])!=1) return 0; } return 1; } int main() { std::ios::sync_with_stdio(false); cin>>p; if(check()) cout<<"Yes"<<endl; else cout<<"No"<<endl; return 0; }
相关文章推荐
- Python开发【第四篇】:Python基础之函数
- PS学习地址
- 实现 fizzBuzz 函数,参数 num 与返回值的关系如下: 1、如果 num 能同时被 3 和 5 整除,返回字符串 fizzbuzz 2、如果 num 能被 3 整除,返回字符串 fizz 3
- 前景检测算法(十五)--LOBSTER算法
- Sqoop源码浅析
- 接口测试完整解决方案(持续更新)
- Codility-BinaryGap
- Java-PipedOutputStream和PipedInputStream类
- Axure之手机屏保滑动效果的实现
- Hdu 5325 Crazy Bobo (拓扑排序)
- 项目30.1字符串处理函数
- uva 1619 - Feel Good || poj 2796 单调栈
- Unity3D The Blacksmith Demo部分内容学习
- 【回家之感】
- 2016-7-10日,博客创建~!
- R实战之从头到尾分析广告数据集
- 如果是普通测试开发,百度地图的签名用测试版就可以了,如果要打包上传到应用市场则要用到测试版,和发布版的签名,否则地图是不显示的。。。
- 可调用对象与function
- 【CJ】APAC_RoundA
- Linux系统查看系统是32位还是64位方法总结(转)