APTX博客

  • ACGN
  • Coding
  • DevOps
  • Daily
  • Share
  • Bangumi
APTX Blog
A Moe Blog Set Up By ミズキ
  1. 首页
  2. OI
  3. 正文

#洛谷#C/C++P1082 同余方程 逆元(欧拉函数)/拓展欧几里得

2018年7月16日 2574点热度 1人点赞 0条评论

逆元

a * b = 1 (mod p) 则a,b互为逆元

费马小定理

a ^(p-1)  = 1 (mod p)

p 为质数

->   a * a ^(p-2)  = 1 (mod p)

于是 a和a ^(p-2) 互为逆元

欧拉函数

定义:φ(x)=x(1-1/p(1))(1-1/p(2))(1-1/p(3))(1-1/p(4))…..(1-1/p(n))      p(1),p(2)…p(n)为x的所有质因数

表示 小于x的数中与x互质的数的数目

欧拉公式:a ^ φ(p)  =1 (mod p)

-> a * a ^ (φ(p)  -1)  =1 (mod p)

a与 a ^ (φ(p)  -1) 互为逆元

题目描述

求关于 xx 的同余方程 ax≡1(modb) 的最小正整数解。

输入输出格式

输入格式:

一行,包含两个正整数 a,b ,用一个空格隔开。

输出格式:

一个正整数 x0​ ,即最小正整数解。输入数据保证一定有解。

输入输出样例

输入样例#1:

3 10

输出样例#1:

7

关于本题

ax≡1(modb)

由欧拉函数 a * a ^ (φ(b)  -1)=1 (mod b)

即求a ^ φ(b-1) 即可

本人提供的题解

拓展欧几里得和欧拉函数两种解法

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
using namespace std;

typedef long long LL;

int a,b,x,y,d;

void ex_gcd(int& ,int& ,int ,int );
void ex_gcd_work();
int euler(int );
LL fast_pow(LL ,LL ,LL );
void euler_work();

int main() {
	cin >> a >> b;
	ex_gcd_work();
	euler_work();
}

void ex_gcd(int &x,int &y,int a,int b) {
	if(b == 0) {
		y = 0;
		x = 1;		
	}
	else {
		ex_gcd(y,x,b,a % b);
	    y -= x * (a / b);
	}
}
void ex_gcd_work() {
	ex_gcd(x,y,a,b);
	cout << (x + b) % b << endl;
}
int euler(int n) {
	int res = n;
	for(int i = 2;i * i <= n;++i) {
		if(n % i == 0) res = res / i * (i - 1); //公式  (i-1)/i == 1-1/i
		while(n % i == 0) n /= i;
	}
	if(n > 1) res = res / n * (n - 1); //最后只剩下 小于4的素数  或者n本身是素数
	return res;
}
LL fast_pow(LL a,LL b,LL MOD) {
	LL res = 1;
	while(b) {
		if(b & 1) res = res * a % MOD;
		a = a * a % MOD;
		b >>= 1;
	}
	return res % MOD;
}
void euler_work() {
	int e = euler(b) - 1;
	cout << fast_pow(a,e,b) << endl;
}

 

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: C/C++ C++ 同余 拓展欧几里得 数论 洛谷 逆元
最后更新:2018年7月16日

神楽坂 みずき

萌萌萌,好萌!

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

神楽坂 みずき

萌萌萌,好萌!

搜索
最新 热点 随机
最新 热点 随机
上岸 Star Divine 现代前端工程师发展方向不完全指北 站点域名变更通知 私たちの居る理由 《サクラノ詩》VI 章 直哉与蓝对话
16Personalities国外的性格测试网站:测试你的性格 #C/C++#数据结构:树状数组/线段树/并查集/树链剖分 Nginx:301永久重定向配置以及自动跳转https配置 Google空间(XSpace)自动配置谷歌框架/直连谷歌商店 华硕天选R7/16G/RTX2060的调教 最新网速和硬件性能测试:YouTube 16K@30FPS
标签聚合
洛谷 OI C++ HTML 日常 ST C/C++ 动漫
分类
  • ACGN
  • Coding
  • Daily
  • DevOps
  • OI
  • Share

COPYRIGHT © 2017-2022 APTX博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang