费马小定理【模板例题】

2023-11-19

费马小定理:
如果p是一个质数,而整数a不是p的倍数,
则有a(p-1)≡1(mod p)。
即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1
变式延伸:
在对质数 p 求余的条件下
n * ap-1 ≡ n * 1 = n
ap-2 ≡ a-1 * 1 = a-1  
ab ≡ a b-p+1 
(≡:等价)
费马小定理参考博客


例题

First:牛牛和牛可乐的赌约
题目

题目原理

ans = mod + 1 - ( (1/n) % mod)m

变式可得

(1/n)%mod ==> nmod-1/ n ==> nmod-2

推荐快速幂博客
(由于 mod 与 m 都很大,再利用快速幂即可得到答案)

#include<stdio.h>
#define ll long long
const ll mod = 1e9+7;

ll quick(ll base, ll power)	//快速幂
{
	long long result=1;
	while(power)
	{
		if(power&1)//只有奇数才乘以底数
			result=result*base%mod;
		base=base*base%mod;
		power=power>>1;
	}
	if(base==0){
		result=0;
	}
	return result%mod;
}

int main(){
	int t;
	scanf("%d", &t);
	while(t--){
		ll n, m, ans;
		scanf("%lld%lld", &n, &m);
		ans = quick(n, mod-2)%mod;
		ans = quick(ans, m);
		ans = mod+1-ans;
		printf("%lld", ans);
		if(t!=0) printf("\n");
	}
	
	return 0;
}

Second:抽卡
题目1
题目2
题目3

解题思路

①、抽到牌概率 = 总概率 - 抽不到牌概率
②、费马小定理变形:(1/n)%mod = nmod-1


实现代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int a[100010]={0}, b[100010]={0};
const int mod = 1e9+7;

ll quick(ll base, ll power){
	ll ans=1;
	while(power){
		if(power&1)
			ans = ans*base%mod;
		power >>= 1;
		base = base*base%mod;
	}
	if(base==0) 
		return 0;
	return ans;
}

int main(){
	int n;
	scanf("%d", &n);
	for(int i=0; i<n; i++) scanf("%d", &a[i]);
	for(int i=0; i<n; i++) scanf("%d", &b[i]);
	
	ll ans=1;
	for(int i=0; i<n; i++){
		ans = (ans*(a[i]-b[i])%mod)*quick(a[i], mod-2)%mod;
	}
	
	printf("%d", (mod-ans+1)%mod);
	
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

费马小定理【模板例题】 的相关文章

  • Linux 下使用 C++ 实现的 Web 文件服务器

    项目地址 Github https github com shangguanyongshi WebFileServer 在学习完成 TCP IP 网络编程 和 Linux高性能服务器编程 后 阅读了一些Web服务器的相关代码 自动动手使用

随机推荐

  • code style

    最近一直在看java convention和google c style 因为老板要提高代码质量 我们小公司一个 因为客户说我们的代码质量太烂了 于是开始搞代码质量 先从静态 代码质量开始 于是就研究起来code style 但是 我发现
  • Pthread 并发编程(三)——深入理解线程取消机制

    基本介绍 线程取消机制是 pthread 给我们提供的一种用于取消线程执行的一种机制 这种机制是在线程内部实现的 仅仅能够在共享内存的多线程程序当中使用 基本使用 include
  • 【ARM】程序快速定位segmentation fault core dumped错误

    1 应用场景 ARM开发过程中经常进程运行着出现段错误 这时候单纯靠加日志打log效率太低 使用gdb的话 由于APP进程太多 生成的core的文件特别大 而且gdb在arm板子也不好单步调试 不太友好还是pass掉 目前使用段错误捕捉SI
  • Python3爬虫——用Xpath提取网页信息

    Python3爬虫 用Xpath提取网页信息 前言 本笔记用于记录整理requests库的一些基本知识 内容会根据博主自己的认知作增添或压缩 水平有限 如有错误请不吝赐教 本文需要读者初步了解HTML有关节点的相关知识 文章目录 Pytho
  • Python技能练习!值得你看的28道常见题型汇总!(附答案解析)

    今天给大家分享30道Python练习题 建议大家先独立思考一下解题思路 再查看答案 文末有惊喜 1 已知一个字符串为 hello world yoyo 如何得到一个队列 hello world yoyo 使用 split 函数 分割字符串
  • C#多线程Lock锁定的使用例子(多线程线程同步)

    这个例子是一个模拟多个人在多台提款机上同时提取一个账户的款的情况 在存取的过程中 可能 A线程取了100 而B线程那边还看见账户上没少掉那100快 所以导致数据不统一 赋值出现问题 下面代码则可以测试出加上Lock锁定 与 不加的区别 先上
  • 学会这几个简单的bat代码,轻松在朋友面前装一波13

    这个标题是干什么用的 最近看晚上某些人耍cmd耍的十分开心 还自称为 黑客 着实比较搞笑 他们那些花里胡哨的东西在外行看来十分nb 但只要略懂一些 就会发现他们的那些十分搞笑和滑稽 今天这里分享几个类似的方法 让你在不懂行的朋友面前秀一波
  • xuexila作文 lxml etree xpath如何同时选择多种标签tag

    以学习啦为例 说明如何选择一个大范围标签下面的两个及以上种类标签tag 例如 div p 1 p h2 2 h2 p 3 p div 只有同时可以选择p h2 内容1 2 3的顺序才不会乱 from lxml import etree im
  • 数据库表结构设计

    做一个项目 必然是少不了数据库设计的 在学习阶段 基本都是单表 然而在实际开发过程中 一对多 多对多的表处处都是 简单整理一下 一对多 多对多表如何设计整理一下思路 数据库实体间有三种对应关系 一对一 一对多 多对多 一对多 一的主键放在多
  • Sublime中自动代码提示插件Anaconda插件下载及设置

    Sublime中自动代码提示插件Anaconda插件下载及设置 一 代码提示功能插件 Anaconda 通过package Control 进行插件下载 按住ctr shift p会弹出对话框 没果没有的话 需要进行package Cont
  • Python可迭代类

    Python可迭代类 iter 和 next python中我们常常会用到for循环结构 for 元素 in 元素来源 for循环后面的元素来源实际上就是一个可以迭代的对象 for in 语句其实做了两件事 第一件事是获取一个可迭代对象 即
  • QT5.14解决控制台打印中文乱码的问题

    如上图 在控制台打印的中文显示乱码 解决方法如下 第一 在main函数中加入 pragma execution character set utf 8 第二 将所有字符串包含中文 用QStringLiteral修饰 综上解决中文乱码问题
  • 彻底理解js中的闭包

    闭包是js的一个难点也是它的一个特色 是我们必须掌握的js高级特性 那么什么是闭包呢 它又有什么用呢 我们都知道 js的作用域分两种 全局和局部 基于我们所熟悉的作用域链相关知识 我们知道在js作用域环境中访问变量的权利是由内向外的 内部作
  • protobuf (Protocol Buffers)

    Protobuf Protocol Buffers 是一种语言无关 平台无关的序列化数据结构的协议 由Google开发 它可以用于将结构化数据序列化为二进制格式 并在不同的系统之间进行高效的数据传输或存储 Protobuf使用 proto文
  • 提示msvcr120.dll丢失怎么办?由于找不到msvcr120.dll如何修复?

    msvcr120 dll 是 Microsoft Visual C 文件中的一个重要组件 它是一种动态链接库 包含了很多函数 提供了许多基础的 C 运行时支持 这个库文件的主要功能是提供 C 应用程序的运行时环境 它是一些常用的 C 运行时
  • Netty从零开始(一)

    需要用到netty 之前就当年实习的时候用过Mina netty没用过 所以加急学习了一下 感觉还不错 不多说 从官网入手 官网地址 http netty io wiki user guide for 4 x html 有兴趣的朋友可以自己
  • 2.4G信号干扰原因

    转自 http wenku baidu com link url iw 8wLsNphcELx J7artsLTdIKtCLGO7X PAgQG6BYXuG GPHzYh8xrhkRVzJo2HL1LvI2p4RlgfxCuVBSwt9VG
  • 方框滤波,均值滤波,高斯滤波

    邻域算子 局部算子 是利用给定像素周围的像素值的决定此像素的最终输出值的一种算子 对于邻域算子 除了用于局部色调调整以外 还可以用于图像滤波 实现图像的平滑和锐化 图像边缘增强或者图像噪声的去除 而线性邻域滤波是一种常用的邻域算子 像素的输
  • Android Studio Unsupported Java

    问题 升级 Android Studio Flamingo 出现如下报错信息 Unsupported Java Your build is currently configured to use Java 17 0 2 and Gradle
  • 费马小定理【模板例题】

    费马小定理 如果p是一个质数 而整数a不是p的倍数 则有a p 1 1 mod p 即 假如a是整数 p是质数 且a p互质 即两者只有一个公约数1 那么a的 p 1 次方除以p的余数恒等于1 变式延伸 在对质数 p 求余的条件下 n ap