<模板>米勒拉宾素数判定 题目是hdu4910
2014-08-11 16:18
381 查看
#include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <iostream> #include <cmath> #include <queue> #include <map> #include <stack> #include <list> #include <vector> #define LL __int64 using namespace std; int t,a[1000010],p[1000010]; void getp(int n) { memset(a,0,sizeof(a)); memset(p,0,sizeof(p)); t=0; for (int i=2;i<=n;i++) { if (!a[i]) p[t++]=i; for (int j=0;p[j] && i*p[j]<=n;j++) { a[i*p[j]]=1; if (i%p[j]==0) break; } } } LL mul(LL a, LL b, LL mod) { LL ret = 0; while (b > 0) { if (b&1) ret = (ret + a) % mod; b >>= 1; a = (a<<1) % mod; } return ret; } LL pow_mod(LL x, LL k, LL mod) { LL ans = 1; while (k) { if (k&1) ans = mul(ans, x, mod); x = mul(x, x, mod); k >>= 1; } return ans; } bool mlrb (LL n) { if (n < 2) return false; if (n == 2) return true; if (n % 2 == 0) return false; for (int i = 0; i < 20; i++) { LL a = rand() % (n - 1) + 1; if (pow_mod(a, n - 1, n) != 1) return false; } return true; } int main() { int i; LL n; getp(1000005); //printf("%d",t); while (~scanf("%I64d",&n) && (n!=-1)) { if (n==1 || n==2 || n==4) { printf("%I64d\n",n-1); continue; } if (n % 4==0) { puts("1"); continue; } LL m=n; if (m % 2==0) m/=2; LL k=0; for (i=0;i<t && p[i]<m;i++) if (m % p[i]==0) { while (m%p[i]==0) m/=p[i]; if (m==1) k=1; break; } m=n; if (m % 2==0) m/=2; if (k==1) printf("%I64d\n",n-1); else { if (mlrb(m)) printf("%I64d\n",n-1); else { k=sqrt(m*1.0); if (k*k==m) printf("%I64d\n",n-1); else puts("1"); } } } return 0; }
相关文章推荐
- 在HTML中使用<script>做模板
- <七>读<<大话设计模式>>之模板模型
- <九度 OJ>题目1545:奇怪的连通图
- <九度 OJ>题目1012:畅通project
- <九度 OJ>题目1061:成绩排序
- <九度 OJ>题目1112:拦截导弹
- <C++学习笔记>函数模板 template
- <模板> 矩形分割
- 网易2009年校园招聘--一道关于<list>的STL题目
- <模板>zoj3696 Alien's Organ 概率论:泊松分布
- <模板><计算几何>半平面求交学习小记
- <模板><计算几何>求两向量夹角
- <模板><计算几何>凸包及其基本算法
- <九度 OJ>题目1545:奇怪的连通图
- <九度 OJ>题目1028:继续畅通工程
- <模板>poj2031 Building a Space Station(最小生成树)
- <模板> Hdu 1402 A * B Problem Plus 大数乘法
- 指定した文字列が含まれるか判定する<logic:match、notMatch>
- <模板><计算几何>点与多边形的位置关系
- <类模板 的 成员函数的特化>及<类 的 成员模板函数的特化>