费尔马小定理素数java_利用费马小定理判断素数

今天听了ljss神犇的数论课,顿时感觉————我真的是太弱啦!

我只能稍微写一下我能听懂的部分orz

那么这就是今天我为数不多能听懂一点的之一......QAQ

首先先介绍今天的主角:费马小定理

4a1baefff049dabba227ef4c4301d496.png————转自维基百科

没看懂的话我稍微解释一下,就是

假如p是质数,且GCD(a,p)=1,那么 a^(p-1) ≡1(mod p)(假如p是质数,且a,p互质,那么 a的(p-1)次方除以p的余数恒等于1)

因此我们就似乎有了基于费马小定理的判断素数方式:随机枚举使gcd(a,p)=1的a。判断该表达式是否成立--------记为命题q

但是仔细想一想,会发现命题q实际是费马小定理的逆命题

根据我们在高中数学选修2-1学习的内容,真命题的逆命题不一定是真命题....

似乎出现了一些问题呢x

所幸的是,这种思路大部分时间是正确的,因为根据某个奇怪的性质,费马小定理只有对于少数数才会出现逆命题不成立的情况,而这类数就被称为卡迈克尔数(Carmichael number)

卡迈克尔数在正整数中很少,并且随着数的增大会变的越来越少,在1e8范围内只有255个,1e17范围内也才只有不到6e5个,因此可以直接多次应用上述的算法来提高准确性

不过作为有追求的oier,我们怎么能这么没有梦想呢?

我们引入新工具:

二次探测定理 如果p是一个素数,且0

下面给出简单的证明:

x^2≡1(mod p)

→x^2-1≡0(mod p)

→(x-1)(x+1)≡0(mod p)

那么我们将二次探测定理转换成

(a(p-1)/2)2≡1(mod p)

应用上面这两个定理可以使失误率达到最劣2-t,而实际远远达不到这个数,因此一般3~5次即可保证正确性

该算法就是Miller_Rabin算法,期望复杂度O(tlog3n)

代码:(还有些许唐突的地方,待补全)题目为洛谷线性筛模板

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define N 10000001

typedef long long ll;

const int inf=0x3fffffff;

const int maxn=2017;

using namespace std;

inline int read()

{

int f=1,x=0;char ch=getchar();

while(ch>'9'|ch

{

if(ch=='-')

f=-1;

ch=getchar();

}

while(ch<='9'&&ch>='0')

{

x=(x<<3)+(x<<1)+ch-'0';

ch=getchar();

}

return f*x;

}

ll qmulti(ll a,ll b,ll c)

{

ll tem=a,sum=0;

while(b)

{

if(b&1)sum=(sum+tem)%c;

tem=(tem+tem)%c;

b>>=1;

}

return sum;

} //防止乘的时候过大爆掉

ll qpow(ll a,ll b,ll c)

{

ll k=1;

while(b>0)

{

if(b&1)k=(k*a)%c;

a=(a*a)%c;

b>>=1;

}

return k;

}

bool witness(int a,int x,int k,int q)

{

ll v=qpow(a,q,x);

if(v==1||v==x-1)return 0;

while(k--)

{

v=v*v%x;

if(v==x-1)return 0;

}

return 1;

}

bool miller(ll n)

{

int time=5;//随机time次

if(n==2)return 1;//特判2

if(n<2||n%2==0)return 0;

ll a=0,t=0,b=n-1;

while(!(b&1))

{

t++;

b>>=1;

}

for(int i=0;i

{

a=rand()%(n-1)+1;

if(witness(a,n,t,b))return 0;

}

return 1;

}

int main()

{

srand(time(0));

ll n=read(),m=read();

for(ll i=1;i<=m;i++)

{

ll a=read();

printf(miller(a)?"Yes\n":"No\n");

}

}

a p − 1 ≡ 1 ( mod p ) {\displaystyle a^{p-1}\equiv 1{\pmod {p}}}

5b71e80b05f598bfd9ac9618c87a94323e41e688a p − 1 ≡ 1 ( mod p ) {\displaystyle a^{p-1}\equiv 1{\pmod {p}}}

5b71e80b05f598bfd9ac9618c87a94323e41e688a p − 1 ≡ 1 ( mod p ) {\displaystyle a^{p-1}\equiv 1{\pmod {p}}}

5b71e80b05f598bfd9ac9618c87a94323e41e688a p − 1 ≡ 1 ( mod p ) {\displaystyle a^{p-1}\equiv 1{\pmod {p}}}

5b71e80b05f598bfd9ac9618c87a94323e41e688[a p − 1 ≡ 1 ( mod p ) {\displaystyle a^{p-1}\equiv 1{\pmod {p}}}

5b71e80b05f598bfd9ac9618c87a94323e41e688[a p − 1 ≡ 1 ( mod p ) {\displaystyle a^{p-1}\equiv 1{\pmod {p}}}

5b71e80b05f598bfd9ac9618c87a94323e41e688[a p − 1 ≡ 1 ( mod p ) {\displaystyle a^{p-1}\equiv 1{\pmod {p}}}

5b71e80b05f598bfd9ac9618c87a94323e41e688[a p − 1 ≡ 1 ( mod p ) {\displaystyle a^{p-1}\equiv 1{\pmod {p}}}

5b71e80b05f598bfd9ac9618c87a94323e41e688[a p − 1 ≡ 1 ( mod p ) {\displaystyle a^{p-1}\equiv 1{\pmod {p}}}

5b71e80b05f598bfd9ac9618c87a94323e41e688a p − 1 ≡ 1 ( mod p ) {\displaystyle a^{p-1}\equiv 1{\pmod {p}}}

5b71e80b05f598bfd9ac9618c87a94323e41e688a p − 1 ≡ 1 ( mod p ) {\displaystyle a^{p-1}\equiv 1{\pmod {p}}}

5b71e80b05f598bfd9ac9618c87a94323e41e688

来源:https://www.cnblogs.com/tsunderehome/p/7517658.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java读取一段缓存音频文件夹_java实现酷狗音乐临时缓存文件转换为MP3文件的方法...

本文实例讲述了java实现酷狗音乐临时缓存文件转换为MP3文件的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;酷狗临时缓存文件&#xff0c;其实已经是吧MP3文件下载好了&#xff0c;只是名字看上去好像是通过md5算法重命名的。酷狗在缓存文件的时候会同时缓存歌词…

java aspectj_AspectJ基本用法

AOP虽然是方法论&#xff0c;但就好像OOP中的Java一样&#xff0c;一些先行者也开发了一套语言来支持AOP。目前用得比较火的就是AspectJ了&#xff0c;它是一种几乎和Java完全一样的语言&#xff0c;而且完全兼容Java(AspectJ应该就是一种扩展Java&#xff0c;但它不是像Groovy…

php连接数据库返回数据类型,php从数据库读取数据,并以json格式返回数据的方法...

php中&#xff0c;从数据库读取数据&#xff0c;并以json格式返回数据。具体方法如下&#xff1a;第一步&#xff0c;定义相关变量$servername "localhost";$username "root";$password "root";$mysqlname "datatest";$json ;$da…

php json to object,PHP JSON_FORCE_OBJECT函数实现强转对象

JSON_FORCE_OBJECT在多级数组中&#xff0c;JSON_FORCE_OBJECT会将所有嵌套数值数组编码为对象。如果你只关注第一级数组(例如&#xff0c;使其适合作为MySQL JSON列)&#xff0c;那么可以将第一级数组强制转换为对象&#xff0c;例如&#xff1a;$ json json_encode((object)…

php推送示例wordpress,给WordPress的编辑后台添加提示框的代码实例分享

WordPress 3.5 新添加了一个提示框功能&#xff0c;可以创建一个提示框&#xff0c;然后指向任何元素&#xff0c;比如下边的例子&#xff1a;本文就来教你怎么创建一个这样的提示框。首先需要添加提示框的脚本&#xff0c;这样才能使用提示框的 JS 方法。//挂载提示框脚本func…

php 去除标签内样式,PHP去除html标签,php标记及css样式代码参考

语法: string strip_tags(string str);传回值: 字串函式种类: 资料处理解析&#xff1a;本函式可去掉字串中包含的任何 HTML 及 PHP 的标记字串。若是字串的 HTML 及 PHP 标签原来就有错&#xff0c;例如少了大于的符号&#xff0c;则也会传回错误。而本函式和 fgetss() 有着相…

jmeter php网站,jmeter实战之phpwind随机回帖/发帖

关键词&#xff1a;jmeter phpwind 性能测试一、性能需求1)性能需求&#xff1a;30min内&#xff0c;phpwind随机回帖/发帖&#xff0c;观察服务器性能的表现。2)需求分析&#xff1a;2.1 核心业务论坛系统的核心业务主要是登录、看帖、发帖、回帖&#xff0c;业务建模时应考虑…

restful api php,RestfulAPI · ThinkPHP6.0接口开发与应用及uniapp快速入门(更新完毕) · 看云...

# Restful API>[success]Restful API是目前Web API 设计中比较流行的一种设计风格。## Restful API>[info]RESTful是一种软件架构风格、设计风格&#xff0c;而**不是**标准&#xff0c;只是提供了一组设计原则和约束条件。>[danger]对于这种风格&#xff0c;ThinkPHP…

php 向服务器发放请求,PHP客户端向服务器端发送请求并向远程服务器发送服务器端请求...

我的方案如下&#xff1a;>单击按钮时,客户端将向服务器端发送请求>一旦服务器端收到请求,它将向远程服务器发送另一个请求以获得结果>一旦响应到来,服务器端应该回应客户端的响应.客户$.post(login_server.php{act:"post",phone:phone,passwords:passwords…

php检查在线用户,php – 检查用户是否在线laravel

我有列last_activity,其中写入日期最后一个活动用户使用中间件.我如何检查在线用户以及何时注销&#xff1f;中间件&#xff1a;class LastActivityUser{/*** Handle an incoming request.** param \Illuminate\Http\Request $request* param \Closure $next* return mixed*/pu…

java 写文件缓存,java泛型实现文件缓存

package joyport.hbase;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.HashMap;/*** 文件缓存读写** author xiepengjoyport.com*/public class…

java方法重载的意义,java方法重载

class ChongZai{public void a(int a);public void a(Strting a);public void a(int a,int b);}如上就是一个重载了 而重载要满足一下条件:1.必须是同一个类2.方法名(也可以叫函数)一样3.参数类型不一样或参数数量不一样重载的作用&#xff1a;还是以上面的例子ChongZai cz new…

php7改进,关注一下:PHP 7.3.7 正式发布 改进、修复的地方不少哦

PHP 7.3.7正式发布了。PHP(PHP&#xff1a;Hypertext Preprocessor)是一种在电脑上执行的脚本语言&#xff0c;主要是用途在于处理动态网页&#xff0c;也包含了命令列执行接口(command line interface)&#xff0c;或者产生图形使用者接口(GUI)程式。版本主要还是修复 bug&…

matlab光学教程,基于MATLAB的物理光学仿真

摘要&#xff1a;利用MATLAB编程语言对典型物理光学实验进行了仿真模拟&#xff0c;制作了包括干涉、衍射、信息光学、晶体光学实验在内的光学实验仿真平台&#xff0c;可应用到光学理论和实验教学中&#xff0c;使整个抽象的物理过程变得直观形象&#xff0c;增强了学生的学习…

php jwt token刷新方案,laravel JWT自动刷新 自定义验证器

在前面的文章中&#xff0c;我们引入了JWT的验证方式&#xff0c;但是在前面并没有做过多的处理&#xff0c;只是用JWT生成了一个token&#xff0c;那么今天来就解决后续问题为了保证用户信息的安全&#xff0c; 我们的生成的JWT不可能一直有效&#xff0c;我们在配置文件里边配…

php orm 链式,关于php:雄辩的ORM中的交叉和分页

大家好&#xff0c;我有3张桌子&#xff1a;具有以下属性的名为content的表&#xff1a;idnametable_type_idrelease_datepopularity另一个名为content_genres的表&#xff0c;具有以下属性&#xff1a;content_idgenres_id另一个具有以下属性的表&#xff0c;称为genres&#…

2019java形势,2019Java开发还有哪些发展

相信已经有不少人在心里考虑着春节之后转行新工作了吧&#xff0c;而在众多行业中IT行业&#xff0c;特别是Java开发、Java程序员等岗位相信是很多人的首选。谁让现在程序员薪资这么高呢&#xff0c;但是现在互联网发展迅速&#xff0c;各类编程语言层出不穷&#xff0c;比如py…

php取消转译代码,PHP在我不需要的时候进行转义

我有一个问题,即PHP在我不希望它出现在代码中的地方进行转义:$url_ stripslashes(((substr(strtolower($url),0,7)!"http://")? "http://".$url:$url));$host $this->googleDomains[mt_rand(0,count($this->googleDomains)-1)];$target "/s…

matlab给plc发送命令,想学习下如何将PLC发送的指令让软件接收到?

PLC作为下位机&#xff0c;接收上位机的执行命令&#xff0c;并将执行结果反馈给上位机。工具/原料电脑、PLC、USB转RS232数据线和RS232转RS485模块(或者USB转RS485)方法/步骤PLC与电脑线路连接&#xff0c;根据电脑的串口情况&#xff0c;1.电脑自带RS232串口&#xff0c;那么…

mysql允许两个用户远程连接,配置MySQL服务允许用户远程连接

默认情况下&#xff0c;mysql只允许本地登录&#xff0c;如果要开启远程连接&#xff0c;则需要修改/etc/mysql/my.conf文件。一、修改/etc/mysql/my.conf找到bind-address 127.0.0.1这一行改为bind-address 0.0.0.0即可二、为需要远程登录的用户赋予权限1、新建用户远程连接…