小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. DOTA数据集

    航拍图像面临的问题 正常图像受重力作用相对固定,航拍图像的物体受拍摄角度影响 航拍图像的物体比例变化很大 某些航拍图像中小物体很密集 传统的数据集面临数据偏差的问题严重 好的数据集必备的几个特征 大量 ...

  2. Mybatis相关知识点(一)

    MyBatis入门 (一)介绍 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code, ...

  3. tomcat启动和停止脚本

    #!/bin/bash JDK_HOME=/apps/jdk1.7.0_79 CATALINA_HOME=/apps/tomcat export JDK_HOME CATALINA_HOME sour ...

  4. Output of C++ Program | Set 15

    Predict the output of following C++ programs. Question 1 1 #include <iostream> 2 using namespa ...

  5. Type difference of character literals in C and C++

    Every literal (constant) in C/C++ will have a type information associated with it. In both C and C++ ...

  6. MyBatis(2):CRUD操作

    编写接口 import com.shandx.pojo.User; import java.util.List; public interface UserMapper { <span clas ...

  7. 多线程异步操作导致异步线程获取不到主线程的request信息

    org.springframework.web.context.request.RequestContextHolderorg.springframework.web.context.request. ...

  8. Cnblog博客美化

    具体的使用教程文档在这里 BNDong/Cnblogs-Theme-SimpleMemory 简要的操作如下: 博客园 - 管理 - 设置 值得注意得是: 要想JS代码要申请才可以使用 博客侧边栏 可 ...

  9. 使用$.post方式来实现页面的局部刷新功能

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. 在Eclipse中编写jQuery代码时产生的错误(连载)

    1.Error:启动Eclipse中的服务,显示错误,端口号被占用 解决方法: 方式一:修改对应的端口号(实际情况实际处理) 方式二:在进程中关闭Eclispe重新打开即可(截图说明) 2.Error ...