Pseudoprime numbers(快速幂模+素性测试)

VGG16 VGG16学习笔记 阅读详情

Pseudoprime numbers

Fermat's theorem states that for any prime number p and for any integer a > 1, ap = a (mod p). That is, if we raise a to the pth power and divide by p, the remainder is a. Some (but not very many) non-prime values of p, known as base-a pseudoprimes, have this property for some a. (And some, known as Carmichael Numbers, are base-a pseudoprimes for all a.)

Given 2 < p ≤ 1000000000 and 1 < a < p, determine whether or not p is a base-a pseudoprime.

Input

Input contains several test cases followed by a line containing "0 0". Each test case consists of a line containing p and a.

Output

For each test case, output "yes" if p is a base-a pseudoprime; otherwise output "no".

Sample Input

3 2
10 3
341 2
341 3
1105 2
1105 3
0 0

Sample Output

no
no
yes
no
yes
yes

题意:

给定p和a,判断p是不是以a为基础的伪素数

即不是素数,但满足以a为底数时的费马小定理公式ap≡a (mod p)ap≡a (mod p)

分析:

直接快速幂取模判断是否满足上面式子,且不是素数则是伪素数

如果知道费马小定理的人都知道费马小定理的公式其实是写成

ap−1≡1 (mod p)ap−1≡1 (mod p)

但是不能用这个式子判断是否满足,wa了

满足这个式子需要一个条件那就是p不能整除a

但是题目告诉了a < p所以我也不知道为什么了。。。希望有大佬解释一下

两面同乘a是为了得到一个对所有整数a都成立的陈述,这种形式使用起来更加方便

题目也给的第一个式子那就用第一个式子判断吧。。

code:

#include <iostream>
#include <cstdio>
#include <stdlib.h>
#include <time.h>
using namespace std;
typedef long long ll;
const int S = 8;
ll mul_mod(ll a,ll b,ll mod){
    a %= mod;
    b %= mod;
    ll ans = 0;
    while(b){
        if(b & 1){
            ans += a;
            if(ans >= mod) ans -= mod;
        }
        a <<= 1;
        if(a >= mod) a -= mod;
        b >>= 1;
    }
    return ans;
}

ll q_pow(ll a,ll b,ll mod){
    ll ans = 1;
    a %= mod;
    while(b){
        if(b & 1){
            ans = mul_mod(ans,a,mod);
        }
        a = mul_mod(a,a,mod);
        b >>= 1;
    }
    return ans;
}

bool check(ll a,ll n,ll x,ll t){
    ll ret = q_pow(a,x,n);
    ll last = ret;
    for(int i = 1; i <= t; i++){
        ret = mul_mod(ret,ret,n);
        if(ret == 1 && last != 1 && last != n-1) return true;
        last = ret;
    }
    if(ret != 1) return true;
    return false;
}

bool Miller_Rabin(ll n){
    if(n < 2) return false;
    if(n == 2) return true;
    if((n & 1) == 0) return false;
    ll x = n - 1;
    ll t = 0;
    while((x & 1) == 0){
        x >>= 1;
        t++;
    }
    for(int i = 0; i < S; i++){
        ll a = rand() % (n-1) + 1;
        if(check(a,n,x,t))
            return false;
    }
    return true;
}
int main(){
    ll p,a;
    while(scanf("%lld%lld",&p,&a) != EOF){
        if(p == 0 && a == 0) break;
        if(q_pow(a,p,p) == a && !Miller_Rabin(p)){
            printf("yes\n");
        }
        else printf("no\n");
    }
    return 0;
}
自动批量安装加载cran, bioconductor和github三个平台的所有的R包 阅读详情

相关推荐

线性代数笔记【空间曲面】

二次曲面 曲面可以看成是一个动点或一条动曲线按照一定条件或规律运动产生的轨迹 曲面的方程即是该动点的坐标所满足的方程 空间解析几何中,一般会涉及到由曲面写方程和由方程看曲面两种类型问题 曲面与曲面方程 球面方程 球面:空间内与定点的距离等于定长的点的集合 这一定点叫球心,定长叫半径 标准方程 (x−x0)2+(y−y0)2+(z−z0)2=r2(x-x_0)^2+(y-y_0)^2+(z-z_0)^2=r^2(x−x0​)2+(y−y0​)2+(z−z0​)2=r2 球心P0(x0,y0,z0)P_0(

qq_40500005的博客 3246

Pseudoprime numbers(快速幂 + 素数)

Pseudoprime numbers 题意 费马小定理指出,对于任何素数p和任何整数a>1,ap ≡a (mod p)。也就是说,如果a的p次幂除以p,余数是a。一些(但不是很多)非素数值p,如果存在整数a>1使得ap = a (mod p),则称p是以a为基的伪素数。(还有一些数被称为Carmichael数,对于所有满足GCD(a, n)=1的正整数a,都是以a为基的伪素数。) 给...

百般回首曾经的相遇,留下的只是一缕残忆 1427

链路聚合Eth-trunk以及华为交换机配置实例

链路聚合简介 以太网链路聚合Eth-Trunk简称链路聚合,它通过将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的。同时,这些捆绑在一起的链路通过相互间的动态备份,可以有效地提高链路的可靠性。 目的: 随着网络规模不断扩大,用户对骨干链路的带宽和可靠性提出越来越高的要求。在传统技术中,常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽,但这种方案需要付出高额的费用,而且不够灵活。 采用链路聚合技术可以在不进行硬件升级的条件下,通过将多个物理接口捆绑为一个逻辑接口

ChaseAug的博客 2万+

Pseudoprime numbers (快速幂)

Fermat's theorem states that for any prime numberpand for any integera> 1,ap=a(modp). That is, if we raiseato thepthpower and divide byp, the remainder isa. Some (but not very many) ...

Lbo_tao的博客 304

从亚稳态到流片失败:SpyGlass CDC在5G芯片设计中的避坑指南

本文深入探讨了在复杂5G芯片设计中,如何利用SpyGlass CDC工具构建高效的时钟域交叉验证流程,以避免因亚稳态问题导致的流片失败。文章结合实战经验,详细解析了从约束编写、时钟复位完整性检查到层次化验证和特殊场景处理的全过程,并强调了精准的检查约束是确保验证有效性的基石,旨在帮助设计团队安全跨越异步时钟域的雷区。

weixin_29168153的博客 444

基于stm32f407VGT6控制WS2812的TIM1+PWM+DMA实现方式

项目中使用到了ws2812灯带,作为产品的外观显示灯,经过开发之后,整理一下,仅供大家参考。 WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。 其外型与一个5050 LED灯珠相同, 每个元件即为一个像素点。 像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路, 还包含有高精度的内部振荡器和可编程定电流控制部分, 有效保证了像素点光的颜色高度一致。数据协议采用单线归零码的通讯方式, 像素点在上电复位以后, DIN端接受从控制器传输过来的数据, 首先送过来的24bit数据被第一个像素

weixin_43608153的博客 9213

伪素数判断----Pseudoprime numbers

伪素数定义:伪素数,又叫做伪质数:它满足费马小定理,但其本身却不是素数。最小的伪素数是341。有人已经证明了伪素数的个数是无穷的。事实上,费马小定理给出的是关于素数判定的必要非充分条件。若n能整除2^(n-1)-1,并n是非偶数的合数,那么n就是伪素数。第一个伪素数341 是萨鲁(Sarrus)在1819年发现的。 简单解释一下伪素数:一个数字p本身不是素数但满足费马小定理,即a的p次方模p与a模...

柠檬的博客~~~ 7252

云服务器安装ros教程

要在 CentOS 7 系统上安装 RouterOS,您需要将 RouterOS 安装为虚拟机或直接安装到物理硬盘上。这里提供的是将 RouterOS 安装到物理硬盘上的步骤,这将完全替换现有的 CentOS 7 系统。请确保您已经备份了所有重要数据。

qq_37662563的博客 2145

POJ 3641: 伪素数

POJ 3641: Pseudoprime numbers

十飏 de FATMOUSE. 379

【温室气体数据集】全球总碳柱观测网络 TCCON

【温室气体数据集】全球总碳柱观测网络 TCCON

WW、forever的博客 437

DSI3协议介绍

分布式系统接口(DSI)是一种通用且功能强大的总线协议,旨在将多个遥感器和执行器设备互连到中央控制模块。该网络的主要目标应用是汽车安全系统。这种应用的一些特点是需要低成本、高鲁棒性、中速互连,仅限于两根导线。此外,它必须具有故障安全性、确定性和良好的EMC特性。即使具有所有级别的智能和可编程性的设备都可以连接到网络,远程设备也必须能够通过简单的状态机实现。由于模块尺寸非常重要,因此中央模块和远程单元中的最小组件至关重要。

汽车电子软件领域知识分享 1万+

快速幂算法

3^10=333333333*3 //尽量想办法把指数变小来,这里的指数为10 3^10=(33)(33)(33)(33)(3*3) 310=(3*3)5 310=95 //此时指数由10缩减一半变成了5,而底数变成了原来的平方,求310原本需要执行10次循环操作,求95却只需要执行5次循环操作,但是310却等于95,我们用一次(底数做平方操作)的操作减少了原本一半的循环量,特别是在幂特别大的时候效果非常好,例如210000=45000,底数只是做了一个小小的平方操作,而指数就从10000变成了5000,减

Jackie1377的博客 317

【问题解决】解决 Python `PermissionError` 权限不足:文件/进程/端口全场景修复

本文总结了Python程序中常见的权限问题及解决方案,包括文件、进程和端口权限错误。文件权限问题通常由文件占用、权限不足或路径错误引起;进程问题多因权限不足或系统限制;端口问题则与端口占用、防火墙或特权端口相关。解决方案提供了详细的代码实现:文件权限管理器类(FilePermissionManager)包含检查权限(check_permission)、修复权限(fix_permission)、安全写入(safe_write)和安全删除(safe_delete)等方法,通过异常处理和临时文件等技术确保操作安全

博客 357

POJ 3641 Pseudoprime numbers【素数+快速幂】

Pseudoprime numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8291   Accepted: 3471 Description Fermat's theorem states that for any prime number p a

希望的专栏 529

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

POJ 3641 Pseudoprime numbers (快速幂)

Pseudoprime numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9817 Accepted: 4170 Description Fermat’s theorem states that for any prime number p and for any int

Usher_Ou的博客 380

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

3月2日 Pseudoprime numbers(费马素性测试、卡米歇尔数、伪素数)

这是个水题,也没有什么实际应用意义(费马素性测试对卡米歇尔数无效)。一些博客把这题归为labin-miller测试,这是有误的。 写博客是因为被数组折腾了下,本来想初始化筛素数,MLE了,老老实实暴搜(注意题目的定义,伪素数首先要不是素数),但是问题来了,既然已经暴搜得出他是不是素数了,测试素性的意义何在? 可能题目只是想练一下快速幂。 Pseudoprime numbers Time L

反之亦然 528

POJ 3641 Pseudoprime numbers (快速幂、素性测试)

Pseudoprime numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7076   Accepted: 2900 Description Fermat's theorem states that for any prime number p a

TaoSama's Microcosm 662

(Relax 快速幂取模1.4)POJ 3641 Pseudoprime numbers(快速幂取模+大素数MillerRabin模板题)

/* * POJ_3641.cpp * * Created on: 2013年11月19日 * Author: Administrator */ #include #include using namespace std; typedef long long ll; /** * 快速幂取模 * 求a^b%m的值 */ ll qpow(ll a, ll b

黄俊东的专栏 1308

POJ:3641 Pseudoprime numbers(快速幂)

Pseudoprime numbers Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8579   Accepted: 3604 Description Fermat's theorem states that for any prime number p and

zugofn的博客 497

Pseudoprime numbers POJ - 3641

Fermat's theorem states that for any prime number p and for any integer a > 1, ap = a (mod p). That is, if we raise a to the pth power and divide by p, the remainder is a. Some (but not very many)

yinghui_yht的博客 335

POJ 3641 Pseudoprime numbers (miller_rabin)

题意:输入p,a,若p是以a为底的伪素数输出“yes”,否则输出“no”。 http://blog.youkuaiyun.com/w20810/article/details/43603799 题目比较水,但是有个坑还是一直不明白。打个1~40 000的素数表完全可以判断1~1 000 000 000以内的输入的p是否为素数,一直RE。没用素数表,直接在2~sqrt(p)判断就AC了。 代码:

w20810的专栏 423

poj 3641 Pseudoprime numbers(Miller-Rabin素数测试)

题目链接:http://poj.org/problem?id=3641 题目大意:根据已a为基的伪素数的定义,判断p是否是已a为基的伪素数。(p为合数且满足a^p mod p = a), p 解题思路:p 参考代码: #include #include #include #include #include #include #include using namespa

Hacker_vision 1123

poj 3641 Pseudoprime numbers Miller_Rabin测素裸题

题目链接 题意:题目定义了Carmichael Numbers 即 a^p % p = a.并且p不是素数。之后输入p,a问p是否为Carmichael Numbers? 坑点:先是各种RE,因为poj不能用srand()...之后各种WA..因为里面(a,p) ?= 1不一定互素,即这时Fermat定理的性质并不能直接用欧拉定理来判定。。即 a^(p-1)%p = 1判断是错误的。。作的 ...

weixin_30642305的博客 118

Pseudoprime numbers(快速幂取模)

Pseudoprime numbersTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 11918 Accepted: 5113DescriptionFermat's theorem states that for any prime number p and for any integer a &gt; 1, ap = a (mo...

这可是一个难过的暑假哇,别白过 297

Pseudoprime numbers

Description Fermat's theorem states that for any prime numberpand for any integera> 1,ap=a(modp). That is, if we raiseato thepthpower and divide byp, the remainder isa. Some (but not very many) non-prime values ofp, known as base-apseu...

weixin_54664477的博客 563

POJ3641 Pseudoprime numbers(快速幂取模)

<br /><br />Pseudoprime numbersTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 3171 Accepted: 1105<br />Description<br />Fermat's theorem states that for any prime number p and for any integer a > 1, ap = a (mod p). That is, if we raise a to the 

hqd_acm的专栏 1391
上一篇: POJ 2429 GCD & LCM Inverse(Miller_Rabin大素数测试+Pollar_rho素因子分解)
下一篇: Problem about GCD(找规律+大素数判断+分解因子)
Guuuuuu老师儿
博客等级 码龄9年 259粉丝 718原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值