选拔赛-数论-逆元
来源:互联网 发布:怎样成为淘宝摄影师 编辑:程序博客网 时间:2024/05/04 08:51
id=97
x∗y≡z(mod p),z⩽k
x≡z∗y−1(mod p),z⩽k
因此算出y在p下的逆元,枚举z就可以求出x了
时间复杂度O(k)
#include <bits/stdc++.h>using namespace std;#define N 100020#define M 200200#define LL long long#define mod 1000000007#define inf 0x3f3f3f3f#define pll pair<LL, LL>#define fi first#define se second#define MP make_pair#define PB push_back#define pii pair<int, int>#define ls (i << 1)#define rs (ls | 1)#define md ((ll + rr) >> 1)#define lson ll, md, ls#define rson md + 1, rr, rsint y, k, p;int qpow(int x, int k) {int ret = 1;while(k) {if(k & 1) ret = 1LL * ret * x % p;k >>= 1;x = 1LL * x * x % p;}return ret;}int pri[N], np[N], cnt;void init() {//for(int i = 2; i < N; ++i) {if(!np[i]) {pri[cnt++] = i;}for(int j = 0; j < cnt && i * pri[j] < N; ++j) {np[i * pri[j]] = 1;if(i % pri[j] == 0) break;}}}int main() {int cas;scanf("%d", &cas);while(cas--) {scanf("%d%d%d", &y, &k, &p);LL ans = 0;if(y == 0) ans = 1LL * p * (p - 1) / 2;else {y = qpow(y, p - 2);//这里的y变了,变成原来y的逆元for(int i = 1; i <= k; ++i) {ans += 1LL * y * i % p;//i是这里的z,}}printf("%lld\n", ans);}return 0;}
0 0
- 选拔赛-数论-逆元
- 【数论】乘法逆元
- 数论倒数-逆元
- 数论_逆元
- 数论逆元
- 数论之乘法逆元
- 【数论】乘法逆元总结
- 【数论】——逆元
- 逆元 (数论倒数)
- 乘法逆元数论篇
- 数论——逆元
- 数论倒数,又称逆元
- 【数论】关于乘法逆元的证明
- 【数论】 【逆元】 【O(n)求逆元】
- 【我恨数论】之 逆元
- 【数论】【逆元】【贪心】HDU5976 Detachment
- A/B 数论 逆元 待补完
- 数论学习之乘法逆元
- JAVA线程安全与非线程安全
- 1060: 填报志愿 [水题]
- 自定义无限轮播ViewPager的实现
- Linux — 进程(一)基础详解
- PAT_1005. 继续(3n+1)猜想 (25) C++解答
- 选拔赛-数论-逆元
- MFC中如何隐藏RichEdit控件的光标
- 面试题40:查找数组中只出现一次的数字(2个)
- Java工程师面试总结--Struts2部分
- 中缀表达式转后缀表达式
- JS学习笔记——作用域链
- 《Effective C++》继承与面向对象设计
- Ubuntu Jdk卸载 Oracle Jdk安装
- UVA10917 Walk Through the Forest