1479 小Y的数论题

基准时间限制:1.5 秒 空间限制:131072 KB 分值: 640

收藏

关注

小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)
设x=2^kb,y=2^ka
当c|kab+1时必有合法的z
设c*l=kab+1,则cl-kab=1。
注意a,b,c两两互质,所以gcd(c,ab)=1
用扩展欧几里得即可算出l。
z=2^l
若m是2的幂数,余数为0怎么办?
更好办了。。。
当a>1时x=m/2,y=z=1
否则当b>1时 类似
再否则当c>1时 x=y=z=m/2
若a=b=c=1,x=y=1,z=2
注意
l,k算出来后可能比0小,该怎么做大家都明白吧

需要注意一种情况

如果m是2的幂数,那么就可以特判一下直接输出答案。
当a>1时x=m/2,y=z=1
否则当b>1时,类似
再否则当c>1时,x=y=z=m/2
若a=b=c=1,x=y=1,z=2

#include<bits/stdc++.h>
using namespace std;
long long  gcd(long long x,long long y)
{return y==0?x:gcd(y,x%y);
}
long long exgcd(long long a,long long b,long long &x,long long &y)
{if(b==0){x=1;y=0;return a;}else{long long r=exgcd(b,a%b,y,x);y-=x*(a/b);return r;}
}
long long qs(long long y,long long p){if (y==0) return 1;if (y==1) return 2;long long s=qs(y/2,p),s1=qs(y%2,p);return s*s%p*s1%p;
}
bool flag(long long  x){while (x%2==0) x=x/2;if (x==1) return 1;return 0;
}int main()
{long long t;long long a,b,c,m;long long g;long long l,k;scanf("%lld",&t);while(t--){scanf("%lld%lld%lld%lld",&m,&a,&b,&c);if(!flag(m)){g=exgcd(c,a*b,l,k);k=-k;while(l<0||k<0){l=l+a*b;k=k+c;}printf("%lld %lld %lld\n",qs(b*k,m),qs(a*k,m),qs(l,m));}else{if(a>1){printf("%lld 1 1\n",m/2);}else if(b>1){printf("1 %lld 1\n",m/2);}else if(c>1){printf("%lld %lld %lld\n",m/2,m/2,m/2);}else if(a==b==c){printf("1 1 2\n");}}
}}

51nod 1479 小Y的数论题 (exgcd)相关推荐

  1. 51nod 1479 小Y的数论题

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

  2. 8.20模拟赛 [POI2009]WIE-Hexer [Lydsy1708月赛]跳伞求生 51nod 1479 小Y的数论题

    T1 发现 p p p很小,在最短路的基础上再加一维表示一个二进制数,代表当前拥有的剑的种类数,直接用SPFA" role="presentation" style=&q ...

  3. [51nod1479]小Y的数论题——构造+exgcd

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

  4. 埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛E题小Y吃苹果

    链接:https://www.nowcoder.com/acm/contest/91/E 题意: 小Y买了很多苹果,但他很贪吃,过了几天一下就吃剩一只了.每一天小Y会数出自己的苹果个数X,如果X是偶数 ...

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

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

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

    Loj #6089. 小 Y 的背包计数问题 Solution 似乎是比较套路的东西. 我们发现对于i≤ni\leq \sqrt ni≤n​的部分是一个多重背包,而剩下的部分是一个完全背包,因此考虑分 ...

  7. bzoj3209:3209: 花神的数论题

    觉得还是数位dp的那种解题形式但是没有认真的想,一下子就看题解.其实还是设置状态转移.一定要多思考啊 f[i][j]=f[i-1][j]+g[i-1][j] g[i][j]=f[i-1][j-1]+g ...

  8. 小Y的轮回之路——攒机装机、B150装win7

    两个月前,陪伴我5年多的小Y(ideapad-y460N卡)突然大伤元气,硬盘跪了,显示屏也黑了一小块.本着经济实惠凑合用的态度换了个320G的硬盘,没想过几天显示屏情况加重,出现无数个红绿相间的线条 ...

  9. 【2020.10.31 洛谷团队赛 普及组】T2 U138180 神仙数论题

    题目背景 众所周知,ax≡b(modp)a^x≡b(modp)ax≡b(modp) 和 xa≡b(modp)x^a ≡b(modp)xa≡b(modp) 都可以在较为优秀的时间复杂度内求解. Quan ...

最新文章

  1. ftp安装和虚拟用户创建(终于搞清楚了)
  2. 基于Nginx的https服务
  3. Tomcat log文件
  4. 2使用教学_建水三中智能交互式液晶一体机设备投入使用
  5. 一.Nginx的特性和一些知识点
  6. python保留字符串之外的_Python--字符串
  7. 史上最全的人工智能知识体系大全图谱 中国人工智能发展现状与未来
  8. BZOJ1934[SHOI2007] Vote 善意的投票
  9. PMP考试真题模拟PMP考试模拟试题及答案详解
  10. AI 图像识别项目从入门到上线
  11. ArcGIS 地类净面积计算工具
  12. win10系统使用快捷键无法切换窗口怎么办
  13. 制定项目目标利器SMART原则
  14. Vi编辑文件无法保存退出的解决方法
  15. java零到一:Servlet和JSP-7:转发、重定向的区别 和状态管理
  16. 巴蜀3540 -- 【Violet 6 最终话】蒲公英
  17. wince5.0模拟器连接ActiveSync和共享网络PC分享上网及运行BS程序(模拟手持设备)
  18. Mysql数据库经验总结
  19. 学习英音的电影和电视剧
  20. 蓝牙配对过程分析(经典蓝牙)

热门文章

  1. 用计算机探索规律教材分析,五年级数学上册《用计算器探索规律》教学设计
  2. 关于Linux服务器里 /usr/bin 目录和 /usr/local/bin目录
  3. 数据结构和算法学多久_重新学习数据结构和算法
  4. 谈asch系统的共识机制与容错性
  5. 实用小工具:语音朗读软件—朗读女4.0正式版
  6. Java 学习(12)--接口
  7. HLA Dictionary-Allel和抗原之间的对应关系
  8. day82_淘淘商城项目_15_项目总结 + 项目中的问题_匠心笔记
  9. 【GitChat】专利基础知识及写作经验分享
  10. 2012HTML5开发人员必看资料(45个)