首页 > 其他分享 >miller_rabin大素数随机检测模板

miller_rabin大素数随机检测模板

时间:2023-02-03 11:36:47浏览次数:64  
标签:multi return temp int miller ll while 模板 rabin


用到两个定理:

  1. 费马小定理
  2. 二次探测定理

如果 miller_rabin大素数随机检测模板_取模 是一个素数, miller_rabin大素数随机检测模板_取值_02,则方程 miller_rabin大素数随机检测模板_取值_03 的解为 miller_rabin大素数随机检测模板_取模_04miller_rabin大素数随机检测模板_取值_05

对于待检测数 miller_rabin大素数随机检测模板_取模miller_rabin大素数随机检测模板_取值_07 中随机选取 miller_rabin大素数随机检测模板_取模_08miller_rabin大素数随机检测模板_快速幂_09 判断 miller_rabin大素数随机检测模板_取模_10 是否成立 一旦发现不成立则可判定 miller_rabin大素数随机检测模板_取模 不是素数 为了提高正确的概率在求 miller_rabin大素数随机检测模板_取模_12 的过程中用到定理二 令 miller_rabin大素数随机检测模板_取模_13 (其中k是奇数) 然后 miller_rabin大素数随机检测模板_快速幂_14 就相当于 miller_rabin大素数随机检测模板_取值_15 也就是将 miller_rabin大素数随机检测模板_快速幂_16 平方t次 用 miller_rabin大素数随机检测模板_快速幂_17 来表示平方i次的结果 如果发现 miller_rabin大素数随机检测模板_取模_18miller_rabin大素数随机检测模板_快速幂_19 既不等于 miller_rabin大素数随机检测模板_快速幂_20 也不等于 miller_rabin大素数随机检测模板_取模_21 那么就可以判定 miller_rabin大素数随机检测模板_取模 不是素数了 求 miller_rabin大素数随机检测模板_取模_12 的过程用的是快速幂 在用快速幂的过程中还用到了一个大数相乘取模的优化 即化乘法为加法 即模拟两个数相乘的二进制运算过程 每次相加取模 如果 miller_rabin大素数随机检测模板_取模

Code:

ll x[1005];
ll multi(ll a, ll b, ll p)
{ // 化乘法为加法
ll temp = 0;
while (b)
{
if (b & (ll)1)
temp = (temp + a) % p;
a = (a << 1) % p;
b >>= 1;
}
return temp;
}
ll qpow(ll a, ll b, ll p)
{ // 快速幂
ll temp = 1;
while (b)
{
if (b & (ll)1)
temp = multi(temp, a, p);
b >>= 1;
a = multi(a, a, p);
}
return temp;
}
int miller_rabin(ll n)
{
if (n == 0 || n == 1)
return 0;
if (n == 2)
return 1;
int s = 10;
ll k = n - 1;
int t = 0;
while (!(k & (ll)1))
{
t++;
k >>= 1;
}; // k如果不是奇数将k转化为奇数
while (s--)
{
ll a = rand() % (n - 2) + 2; // 随机取值
x[0] = qpow(a, k, n);
for (int i = 1; i <= t; i++)
{
x[i] = multi(x[i - 1], x[i - 1], n); // 记录平方i次的结果
if (x[i] == 1 && x[i - 1] != 1 && x[i - 1] != n - 1)
return 0;
}
if (x[t] != 1)
return 0;
}
return 1;
}


标签:multi,return,temp,int,miller,ll,while,模板,rabin
From: https://blog.51cto.com/u_15952369/6035721

相关文章

  • BZOJ3262 陌上花开(cdq分治模板)
    Description有n朵花,每朵花有三个属性:花形(s)、颜色(c)、气味(m),用三个整数表示。现在要对每朵花评级,一朵花的级别是它拥有的美丽能超过的花的数量。定义一朵花A比另一朵......
  • 大数加法 减法 模板
    加法:#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include<stdlib.h>#include<queue>#include<map>#include<set>#include<io......
  • 大数相乘 (模板)
    输入两个不超过200位的大数,输出它们的积输入样例1234567890098765432100输出样例1219326311126352690000  在下面的例子程序中,用a[220]和b[220]分别存放两个乘数,用z[......
  • 大数相乘 (模板)
    输入两个不超过200位的大数,输出它们的积输入样例1234567890098765432100输出样例1219326311126352690000  在下面的例子程序中,用a[220]和b[220]分别存放两个乘数,用z[......
  • 兔子与兔子(hash模板题)
    题意描述:很久很久以前,森林里住着一群兔子。有一天,兔子们想要研究自己的DNA序列。我们首先选取一个好长好长的DNA序列(小兔子是外星生物,DNA序列可能包含26个小写英文字......
  • 洛谷P3865 【模板】ST表
    题目背景这是一道ST表经典题——静态区间最大值请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为 O(1)O(1)题目描述给定一个长度为 NN 的数列,和 ......
  • 10 个免费的Bootstrap Admin 主题,模板收集
    Indesigningwebsitestoday,oneofthemusthaveframeworksisthetwitter bootstrap.Tothosewhodonothaveanexactideaaboutthebenefitofthisframew......
  • 151道B端产品经理面试问题合集(全部有答案)文末送B端简历模板
    我会一直长期给你分享B端产品经理面试问题大全及答案大全,助你斩获心仪offer!请你去工忠号【B端产品经理面试问题及答案】,以免错失后续更多实用的B端产品经理面试技巧!你好,我是......
  • kubetpl - kubernetes 模板管理工具
    目录Helm、Kustomize、KubetplHelmKustomizeKubetpl安装KubetplKubetpl命令参数参数选项completion-参数自动补齐render-渲染模板go-template语法注释引用变量在te......
  • KPTP 汇报模板
    1.什么是KPTP它是由4个单词:Keep、Problem、Try、Plan的首字母组成的。K:keep,今天做了哪些工作;P:problem,遇到了哪些问题;T:try,计划尝试如何解决这些问题;P:plan,明天的计划......