51nod 1479 小Y的数论题
来源:互联网 发布:电脑找不到windows 编辑:程序博客网 时间:2024/05/19 06:38
1479 小Y的数论题
基准时间限制:1.5 秒 空间限制:131072 KB 分值: 640 难度:8级算法题 收藏 关注
小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
【分析】
构造大法
令
所以我们要解出来k是啥…
不妨设
题目有一个要求是说
【代码】
//51nod 1479 小Y的数论题#include<bits/stdc++.h>#define int long long#define fo(i,j,k) for(i=j;i<=k;i++)using namespace std;int n,m,a,b,c,x,y,k,T;inline int ksm(int x,int k){ x%=m; if(k==0) return 1; if(k==1) return x; int tmp=ksm(x,k>>1); if(k&1) return tmp*tmp%m*x%m; return tmp*tmp%m;}inline void exgcd(int a,int b,int &x,int &y){ if(!b) {x=1,y=0;return;} exgcd(b,a%b,y,x); y-=(a/b)*x;}inline bool check(int n){ while(n%2==0) n/=2; return n==1?1:0;}signed main(){ scanf("%lld",&T); while(T--) { scanf("%lld%lld%lld%lld",&m,&a,&b,&c); if(!check(m)) { exgcd(c,a*b,y,x),k=-x; while(k<0 || y<0) k+=c,y+=a*b; printf("%lld %lld %lld\n",ksm(2,k*b),ksm(2,k*a),ksm(2,y)); } 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 printf("1 1 2\n"); } } return 0;}
阅读全文
1 0
- 【51Nod 1479】小Y的数论题
- [51nod 1479]小Y的数论题
- 51nod 1479 小Y的数论题
- 51nod 1479 小Y的数论题
- 1479 小Y的数论题
- [51nod1479]小Y的数论题
- 51nod1479 小Y的数论题
- 小Y的数论题
- 51nod 1964 1964 陵陵曾玩的数论题
- 51Nod-1468-小Y的IP地址
- 51nod 1468 小Y的IP地址
- 悲剧的数论题
- 求逆元的简单数论题
- [背包DP][小技巧] LOJ#6089. 小 Y 的背包计数问题 && 51NOD 1597 有限背包计数问题
- 数论题
- HDOJ2096 小明A+B(又是一道简单的数论题)
- [小结] 数论题的式子的转化
- hdu 4473 诡异的数论题
- Ubuntu下安装arm-linux-gcc-4.4.3.tar.gz (交叉编译环境)
- JSON与XML的区别比较
- 约瑟夫环问题
- 名企笔试:网易游戏雷火盘古2017实习生招聘笔试题(字符串编码)
- java运行环境总结
- 51nod 1479 小Y的数论题
- java冒泡排序
- File类文件操作全解
- 【分析】Ceph:RGW基本原理
- latex入门——插入图表&浮动体
- Thinking in java-16 递归和迭代
- 当我在传递指针参数的时候我在传什么?
- 信号量机制
- 安卓开发入门之图片缩放(翻译)