小Y喜欢研究数论,并且喜欢提一些奇怪的问题。
这天他找了三个两两互质的数a, b, c,以及另一个数m, 现在他希望找到三个(0, m)范围内的整数x, y, z,使得
 (xa+yb) Mod m=(zc) Mod m

Input
第一行一个数代表数据组数T
接下来T行每行四个整数m, a, b, c
满足a, b, c两两互质
1 <= T <= 100000
1 <= a, b, c <= 10^9
3 <= m <= 10^9
Output
对于每组数据,如果不存在x, y, z满足条件,则输出"Stupid xiaoy"(不含引号)
否则输出一行三个数分别为x, y, z
Input示例
1
100 1 1 1
Output示例
1 2 3

思路:
考虑构造形如2^kab+2^kab=2^(kab+1)的式子
那么只要找到合理的k使得(kab + 1)能被c整除,就可以构造出满足条件的x y z



kab+1=lc

那么有

lc−kab=1

可以用扩展欧几里得解这个不定方程

此时存在的唯一问题是,若m是2的次幂,那么取模之后结果可能是0
这种情况可以特殊处理,例如:
若a > 1,取x = m / 2, y = z = 1
b > 1类似
否则若c > 1, 取x = y = z = m / 2
否则取x = y = 1, z = 2

 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的数论题的更多相关文章

  1. 51nod 1479 小Y的数论题

    一脸不可做题~~~233333 T<=100000,所以一定要logn出解啦. 但是完全没有头绪*&#……%*&……()……#¥*#@ 题解: 因为2^p+2^p=2^(p+1) ...

  2. C - 小Y上学记——认识新同学

    C - 小Y上学记——认识新同学 Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) ...

  3. 【luogu P4007 清华集训2017】小Y和恐怖奴隶主

    题目背景 “A fight? Count me in!” 要打架了,算我一个. “Everyone, get in here!” 所有人,都过来! 题目描述 小 Y 是一个喜欢玩游戏的 OIer.一天 ...

  4. 【luogu P4005 清华集训2017】小Y和地铁

    题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...

  5. 【UOJ#340】【清华集训2017】小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划)

    [UOJ#340][清华集训2017]小 Y 和恐怖的奴隶主(矩阵快速幂,动态规划) 题面 UOJ 洛谷 题解 考虑如何暴力\(dp\). 设\(f[i][a][b][c]\)表示当前到了第\(i\) ...

  6. LOJ #6089. 小 Y 的背包计数问题

    LOJ #6089. 小 Y 的背包计数问题 神仙题啊orz. 首先把数分成\(<=\sqrt n\)的和\(>\sqrt n\)的两部分. \(>\sqrt n\)的部分因为最多选 ...

  7. 【LOJ6089】小Y的背包计数问题(动态规划)

    [LOJ6089]小Y的背包计数问题(动态规划) 题面 LOJ 题解 神仙题啊. 我们分开考虑不同的物品,按照编号与\(\sqrt n\)的关系分类. 第一类:\(i\le \sqrt n\) 即需要 ...

  8. 【LG4317】花神的数论题

    [LG4317]花神的数论题 题面 洛谷 题解 设\(f_{i,up,tmp,d}\)表示当前在第\(i\)位,是否卡上界,有\(tmp\)个一,目标是几个一的方案数 最后将所有\(d\)固定,套数位 ...

  9. P4005 小 Y 和地铁

    题目描述 小 Y 是一个爱好旅行的 OIer.一天,她来到了一个新的城市.由于不熟悉那里的交通系统,她选择了坐地铁. 她发现每条地铁线路可以看成平面上的一条曲线,不同线路的交点处一定会设有 换乘站 . ...

随机推荐

  1. kubernetes部署haproxy、keepalived为kube-apiserver做集群

    也可以用nginx.keepalived做负载均衡,看大家的需求. # yum -y install haproxy keepalived haproxy的配置文件(三台一样): cat > / ...

  2. 振鹏同学正式学习java的第一天!

    一.今日收获 1.最棒的莫过于运行Java的HelloWorld! 2.在同学的帮助下历经坎坷困苦安装完成了Eclipse软件并设置好环境变量. 3.最最最开始了解了Java的前世今生,编程语言发展的 ...

  3. 巩固javaweb第十八天

    提交按钮 只要涉及提交信息,都应该提供一个提交按钮,当点击提交按钮的时候,用户输入的 信息将提交给服务器,意味着输入过程的结束.注册界面中也包含一个提交按钮. 提交按钮的基本格式如下: <inp ...

  4. A Child's History of England.38

    CHAPTER 12 ENGLAND UNDER HENRY THE SECOND PART THE FIRST Henry Plantagenet, when he was but [only] t ...

  5. 源码分析-Producer

    消息生产者的代码都在client模块中,相对于RocketMQ来讲,消息生产者就是客户端,也是消息的提供者. 方法和属性 主要方法介绍 //创建主题 void createTopic(final St ...

  6. 100个Shell脚本——【脚本4】自定义rm命令

    [脚本4]自定义rm命令 linux系统的rm命令太危险,一不小心就会删除掉系统文件. 写一个shell脚本来替换系统的rm命令,要求当删除一个文件或者目录时,都要做一个备份,然后再删除.下面分两种情 ...

  7. GO Exit Fatal panic

    Exit() 应用程序(不只是函数)退出执行 defer 不会被执行(因为程序都退出了) log.Fatal() 输出打印内容 应用程序退出 defer 不会被执行 panic() 函数停止执行(不是 ...

  8. JDBC(1):JDBC介绍

    一,JDBC介绍 SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC.这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加 ...

  9. 【Spring Framework】Spring入门教程(三)使用注解配置

    本文主要介绍四个方面: (1) 注解版本IOC和DI (2) Spring纯注解 (3) Spring测试 (4) SpringJDBC - Spring对数据库的操作 使用注解配置Spring入门 ...

  10. 【Linux】【Services】【Package】Basic

    Linux程序包管理           概述         API:Application Program Interface         ABI:Application Binary Int ...