51nod 1479 小Y的数论题

一脸不可做题~~~233333
T<=100000,所以一定要logn出解啦。
但是完全没有头绪*&#……%*&……()……#¥*#@
题解:
因为2^p+2^p=2^(p+1)
发现这个式子和原式很像诶~~~
所以:2^(kab)+2^(kab)=2^(kab+1)
发现,只要选择合适的k,使得(kab+1)|c即可。
即:kab+1=lc
lc-kab=1
exgcd出解。
因为(a,b,c)=1所以一定有解。
然后快速幂整出来x,y,z,对m取余
但是,当m是2的整次幂的时候,可能出现的问题是,x/y/z为0
因为要选择(0,m)的数,所以0不行。
然后,因为m已经是2的整次幂,而且m>=3
所以,可以特殊考虑。
if a>1 x=m/2,y=1,z=1 (因为m/2的次幂一定mod m 为0)
else if b>1 x=1,y=m/2,z=1
else if c>1(此时a,b都是1啦) x=y=z=m/2 (两边都是0)
else (全是1) x=1,y=1,z=2
所以,综上讨论,不会出现无解的情况的。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b,c,t;
ll m;
ll l,k;
ll x,y,z;
void exgcd(ll a0,ll b0,ll &x,ll &y){
if(b0==){
x=,y=;return;
}
exgcd(b0,a0%b0,y,x);
y-=(a0/b0)*x;
}
ll qm(ll x,ll y){
ll ret=;
while(y){
if(y&) ret=(ret*x)%m;
x=(x*x)%m;
y>>=;
}
return ret%m;
}
int main(){
scanf("%lld",&t);
while(t--){
scanf("%lld",&m);
scanf("%lld%lld%lld",&a,&b,&c);
l=,k=;
exgcd(c,a*b,l,k);
k=-k;
if(k<){
ll p=(-k)/c+;
k=k+c*p;
l=l+p*a*b;
}
else if(k>){
ll p=k/c;
k-=p*c;
l-=p*a*b;
}
x=qm(,k*b);
y=qm(,k*a);
z=qm(,l);
if(x==||y==||z==){
if(a>){
x=m/;
y=;z=;
}
else if(b>){
y=m/;
x=;z=;
}
else if(c>){
x=y=z=m/;
}
else {
x=,y=,z=;
}
}
printf("%lld %lld %lld\n",x,y,z);
}
}
总结:
这种题怎么想??
瞎搞好了。
怎么就能想到2^(kab)+2^(kab)=2^(kab+1)呢?鬼知道。
(xa+yb) Mod m=(zc) Mod m
51nod 1479 小Y的数论题的更多相关文章
- 1479 小Y的数论题
小Y喜欢研究数论,并且喜欢提一些奇怪的问题.这天他找了三个两两互质的数a, b, c,以及另一个数m, 现在他希望找到三个(0, m)范围内的整数x, y, z,使得 (xa+yb) Mod m=(z ...
- 51nod 1471 小S的兴趣 | 分块 链表
51nod 1471 小S的兴趣 题面 小S喜欢有趣的事.但是,每个人的兴趣都是独特的.小S热衷于自问自答.有一天,小S想出了一个问题. 有一个包含n个正整数的数组a和针对这个数组的几个问题.这些问题 ...
- C - 小Y上学记——认识新同学
C - 小Y上学记——认识新同学 Time Limit: 4000/2000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) ...
- 【luogu P4007 清华集训2017】小Y和恐怖奴隶主
题目背景 “A fight? Count me in!” 要打架了,算我一个. “Everyone, get in here!” 所有人,都过来! 题目描述 小 Y 是一个喜欢玩游戏的 OIer.一天 ...
- 【luogu P4005 清华集训2017】小Y和地铁
题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...
- 【UOJ#340】【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划)
[UOJ#340][清华集训2017]小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划) 题面 UOJ 洛谷 题解 考虑如何暴力\(dp\). 设\(f[i][a][b][c]\)表示当前到了第\(i\) ...
- LOJ #6089. 小 Y 的背包计数问题
LOJ #6089. 小 Y 的背包计数问题 神仙题啊orz. 首先把数分成\(<=\sqrt n\)的和\(>\sqrt n\)的两部分. \(>\sqrt n\)的部分因为最多选 ...
- 【LOJ6089】小Y的背包计数问题(动态规划)
[LOJ6089]小Y的背包计数问题(动态规划) 题面 LOJ 题解 神仙题啊. 我们分开考虑不同的物品,按照编号与\(\sqrt n\)的关系分类. 第一类:\(i\le \sqrt n\) 即需要 ...
- 【LG4317】花神的数论题
[LG4317]花神的数论题 题面 洛谷 题解 设\(f_{i,up,tmp,d}\)表示当前在第\(i\)位,是否卡上界,有\(tmp\)个一,目标是几个一的方案数 最后将所有\(d\)固定,套数位 ...
随机推荐
- 20155207 EXP7 EXP8 EXP9 实验补交
20155207 EXP7 EXP8 EXP9 实验补交 20155207 EXP7 网络欺诈技术防范 20155207 EXP8 Web基础 20155207 <网络对抗> Exp9 W ...
- 05-python基础
1.python是什么? 解释性语言.高级语言.开源.简洁.方便.容易扩展 2.可变类型与不可变类型 可变类型:list.dict.可变集合set 不可变类型:数字,str,tuple元组,froze ...
- 未能使用“Csc”任务的输入参数初始化该任务
今天.NetCore2.1版本,建立Asp.net Core web应用程序项目时,报以下错误: 未能使用“Csc”任务的输入参数初始化该任务. “Csc”任务不支持“SharedCompilatio ...
- 4、Docker数据管理
一.挂载类型 1.volumes Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes).保存数据的最佳方式. 使用场景:将容器中的数据持久化到宿主机,比如容器是my ...
- Kubernetes学习-基础架构
kubectl是一个Kubernetes提供的客户端工具,是用于操作kubernetes集群的命令行接口,通过利用kubectl的各种命令可以实现各种功能,是在使用kubernetes中非常常用的工具 ...
- A - 摆仙果
题目描述 Adrian, Bruno与Goran三人参加了仙界的宴会,宴会开始之前先准备了一些仙果供三人品尝,但是仙果的摆放有顺序要求,如果把仙果摆错了位置,仙果就会消失而无法品尝到. 由于三人是第一 ...
- DVWA渗透测试系列 一 (DVWA环境配置)
DVWA介绍: DVWA是一个渗透测试靶机系统. DVWA具有十个模块:分别是 Brute Force(暴力破解).Command Injection(命令行注入).CSRF(跨站请求伪造).File ...
- PAT甲题题解-1032. Sharing (25)-链表水题
#include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...
- Linux内核分析——第三周学习笔记20135308
第三周 构造一个简单的Linux系统MenuOS 计算机三个法宝: 1.存储程序计算机 2.函数调用堆栈 3.中断 操作系统两把宝剑: 1.中断上下文的切换:保存现场和恢复现场 2.进程上下文的切换 ...
- Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理
Linux内核设计(第一周)——从汇编语言出发理解计算机工作原理 计算机工作原理 汇编指令 C语言代码汇编分析 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程htt ...