1479 小Y的数论题
小Y喜欢研究数论,并且喜欢提一些奇怪的问题。
这天他找了三个两两互质的数a, b, c,以及另一个数m, 现在他希望找到三个(0, m)范围内的整数x, y, z,使得
(xa+yb) Mod m=(zc) Mod m
第一行一个数代表数据组数T
接下来T行每行四个整数m, a, b, c
满足a, b, c两两互质
1 <= T <= 100000
1 <= a, b, c <= 10^9
3 <= m <= 10^9
对于每组数据,如果不存在x, y, z满足条件,则输出"Stupid xiaoy"(不含引号)
否则输出一行三个数分别为x, y, z
1
100 1 1 1
1 2 3
思路:
考虑构造形如2^kab+2^kab=2^(kab+1)的式子
设
kab+1=lc
那么有
lc−kab=1
可以用扩展欧几里得解这个不定方程
1 #include <stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #include<math.h>
5 #include<algorithm>
6 #include<iostream>
7 using namespace std;
8 typedef long long LL;
9 pair<LL,LL>exgcd(LL n,LL m);
10 LL quick(LL n,LL m,LL mod);
11 int main(void)
12 {
13 LL m,a,b,c;
14 LL x,y,z;
15 int T;
16 scanf("%d",&T);
17 while(T--)
18 {scanf("%lld %lld %lld %lld",&m,&a,&b,&c);
19 if(m&(m-1))
20 {
21 pair<LL,LL>ask = exgcd(c,a*b);
22 ask.second = -ask.second;
23 while(ask.first<0||ask.second<0)
24 {
25 ask.first+=a*b;
26 ask.second+=c;
27 }
28 x = quick((LL)2,ask.second*b,m);
29 y = quick((LL)2,ask.second*a,m);
30 z = quick((LL)2,ask.first,m);
31 }
32 else
33 { //printf("1\n");
34 if(a > 1)
35 {
36 x = m/2;
37 y = 1;
38 z = 1;
39 }
40 else if(b>1)
41 {
42 x = 1;
43 y = m/2;
44 z = 1;
45 }
46 else if(c > 1)
47 {
48 x = m/2;
49 y = m/2;
50 z = m/2;
51 }
52 else
53 {
54 x = 1;
55 y = 1;
56 z = 2;
57 }
58 }
59 printf("%lld %lld %lld\n",x,y,z);}
60 return 0;
61 }
62 pair<LL,LL>exgcd(LL n,LL m)
63 {
64 if(m==0)
65 return make_pair(1,0);
66 else
67 {
68 pair<LL,LL>ak = exgcd(m,n%m);
69 return make_pair(ak.second,ak.first-(n/m)*ak.second);
70 }
71 }
72 LL quick(LL n,LL m,LL mod)
73 {
74 LL ask = 1;
75 while(m)
76 {
77 if(m&1)
78 ask = ask*n%mod;
79 n = n*n%mod;
80 m/=2;
81 }
82 return ask;
83 }
1479 小Y的数论题的更多相关文章
- 51nod 1479 小Y的数论题
一脸不可做题~~~233333 T<=100000,所以一定要logn出解啦. 但是完全没有头绪*&#……%*&……()……#¥*#@ 题解: 因为2^p+2^p=2^(p+1) ...
- 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\)固定,套数位 ...
- P4005 小 Y 和地铁
题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...
随机推荐
- Python | 迭代器与zip的一些细节
首先抛出一个困扰本人许久的问题: nums = [1,2,3,4,5,6] numsIter = iter(nums) for _ in zip(*[numsIter]*3): print(_) pr ...
- A Child's History of England.21
There was one tall Norman Knight who rode before the Norman army on a prancing horse, throwing up hi ...
- 虚机扩大容量与vm减少所占容量
Linux的虚拟机碎片整理 sudo dd if=/dev/zero of=/free bs=1M sudo rm -f /free 镜像压缩 移动镜像 VBoxManage internalcomm ...
- 结合redis缓存的方式,查询和展示分类信息
package cn.itcast.travel.service.impl;import cn.itcast.travel.dao.CategoryDao;import cn.itcast.trave ...
- 通过SSE(Server-Send Event)实现服务器主动向浏览器端推送消息
一.SSE介绍 1.EventSource 对象 SSE 的客户端 API 部署在EventSource对象上.下面的代码可以检测浏览器是否支持 SSE. if ('EventSource' in w ...
- 【Java】面向类与对象
一.面向对象 对象封装:私有变量+公共方法 方法与构造方法 this变量 Animal.java public class Animal { String name; int age; void mo ...
- 莫烦python教程学习笔记——使用波士顿数据集、生成用于回归的数据集
# View more python learning tutorial on my Youtube and Youku channel!!! # Youtube video tutorial: ht ...
- Mysql原有环境部署多个版本
目录 一.环境准备 二.下载安装包 三.Mysql-5.7单独部署 四.启动Mysql-5.7 五.muliti使用 一.环境准备 原先已经有一个5.6版本的数据库在运行了,当前操作是完全不影响原数据 ...
- PHP数组函数总结与使用
array_change_key_case(数组,CASE_LOWER/CASE_UPPER) 数组键值转化为小写CASE_LOWER/大写CASE_UPPER array_chunk(数组,分割 ...
- 静态类中不可以使用$this
//静态方法中不能使用$this,静态方法调用其他方法可以用static\self\类名来代替class ceshi{ static public function aa(){ static::bb( ...