博客
关于我
Idiot 的乘幂
阅读量:326 次
发布时间:2019-03-04

本文共 1499 字,大约阅读时间需要 4 分钟。

I d i o t 的 乘 幂 Idiot 的乘幂 Idiot

题目链接:

题目大意

已知 a a a b b b c c c d d d p p p

在这里插入图片描述

样例输入

1022 1 3 17 246 12 5 6 1316 16 9 1 1911 1 14 2 238 4 17 15 1910 3 9 1 1311 1 2 2 2313 2 14 12 1711 9 7 11 1415 10 7 7 17

样例输出

17251614318No Solution!1112

数据范围

在这里插入图片描述

思路

这道题是一道数学题。

(一脸懵逼的我只知道怎么做,不知道为什么)
斐蜀定理 a x + b y = 1 ax+by = 1 ax+by=1然后求 x x x y y y,然后就得出: X ≡ X X≡X XXax+cy ≡ b x c y ≡b^xc^y bxcy
然后用扩欧一波神奇操作可以求出 x x x y y y。(不要问我为什么,我推不出来)
如果 x x x或者 y y y是负数,要用逆元把它转成正数(因为我们要快速幂)
然后根据上面的式子 X ≡ b x c y X≡b^xc^y Xbxcy,把 x x x y y y带进去,就可以求出 X X X
不过要带进去验证一下(题目的方程),如果都成立就是答案,否则没有答案。

代码

#include
#define ll long longusing namespace std;ll t, a, b, c, d, p, x, y;ll kuoou(ll a, ll b, ll &x, ll &y) { //扩欧 if (b == 0) { x = 1; y = 0; return a; } ll answ = kuoou(b, a % b, y, x); y -= a / b * x; return answ;}ll ksm(ll a, ll b, ll p) { //快速幂 ll an = 1; while (b) { if (b & 1) an = (an * a + p) % p; a = (a * a + p) % p; b >>= 1; } return an;}int main() { scanf("%lld", &t);//读入 for (ll i = 1; i <= t; i++) { scanf("%lld %lld %lld %lld %lld", &a, &b, &c, &d, &p);//读入 ll bb = b, dd = d, temp = 0;//初始化 kuoou(a, c, x, y);//求出 if (x < 0) { //x为负数 kuoou(b, p, bb, temp); x = -x; } if (y < 0) { //y为负数 kuoou(d, p, dd, temp); y = -y; } ll ans = ksm((bb % p + p) % p, x, p) * ksm((dd % p + p) % p, y, p) % p;//求出答案X if ((ksm(ans, a, p) == b % p) && (ksm(ans, c, p) == d % p))//验证 printf("%lld\n", ans);//有答案 else printf("No Solution!\n");//没有答案 } return 0; }

转载地址:http://doph.baihongyu.com/

你可能感兴趣的文章
c++中explicit和mutable关键字探究
查看>>
c语言结构体字节对齐详解
查看>>
Python 知识点总结篇(3)
查看>>
vuex modules
查看>>
sleep、wait、yield、join——简介
查看>>
web项目配置
查看>>
基于单片机简易信号误差分析设计-全套资料
查看>>
基于单片机简易脉搏测量仪系统设计-毕设课设资料
查看>>
Javascript中String支持使用正则表达式的四种方法
查看>>
eclipse引用sun.misc开头的类
查看>>
Servlet2.5的增删改查功能分析与实现------删除功能(四)
查看>>
spring启动错误:Could not resolve placeholder
查看>>
查询某表格上次进行vacuum的时间
查看>>
invalid byte sequence for encoding
查看>>
redis向数组中添加值并查看数组长度
查看>>
JS编写一个函数,计算三个不同数字的大小,按从小到大顺序打印(穷举法)
查看>>
技术美术面试问题整理
查看>>
C++学习记录 五、C++提高编程(2)
查看>>
VUE3(八)setup与ref函数
查看>>
智能合约开发实践(1)
查看>>