Wikoi P1200 同余方程
来源:互联网 发布:博德之门2增强版 mac 编辑:程序博客网 时间:2024/06/03 08:12
求关于 x 同余方程 ax ≡ 1 (mod b)的最小正整数解。
输入只有一行,包含两个正整数 a, b,用 一个 空格隔开。
输出只有一行包含一个正整数x0,即最小正整数解,输入数据保证一定有解。
3 10
7
【数据范围】
对于 40% 的数据, 2 ≤b≤ 1,000 ;
对于 60% 的数据, 2 ≤b≤ 50,000,000
对于 100% 的数据, 2 ≤a, b≤ 2,000,000,000
一道数论题,在网上查找一下资料,发现了:
对于 ax≡b (mod n)
设d=gcd(a,n),
假定对整数x和y满足d=ax+by(比如用扩展Euclid算法求出的一组解)。
如果d | b,则方程ax=b(mod n)有一个解x0满足x0=x*(b/d) mod n 。
特别的设e=x0+n,方程ax=b(mod n)的最小整数解x1=e mod (n/d),
最大整数解x2=x1+(d-1)*(n/d)。
(以上为转载)
于是明白了此题与扩展欧几里得算法的关系,这样此题就出来了:
参考代码:
#include<iostream>
//#include<cstdio>
//#include<cstdlib>
using namespace std;
long long a,b;
long long k;
struct num
{
int d;
int x;
int y;
}ans;
num gcd(int a,int b)
{
if(b==0)
{
ans.d=a;
ans.x=1;
ans.y=0;
return ans;
}
num l;
l=gcd(b,a%b);
ans.x=l.y;
ans.y=l.x-a/b*l.y;
return ans;
}
int main()
{
cin>>a>>b;
gcd(a,b);
if(ans.x<0) cout<<ans.x+b<<endl;
else cout<<ans.x<<endl;
system("pause");
return 0;
}
运行结果
测试点#1.in 结果: 内存使用量: 256kB 时间使用量: 1ms
测试点#2.in 结果: 内存使用量: 256kB 时间使用量: 1ms
测试点#3.in 结果: 内存使用量: 256kB 时间使用量: 1ms
测试点#4.in 结果: 内存使用量: 256kB 时间使用量: 1ms
测试点#5.in 结果: 内存使用量: 256kB 时间使用量: 1ms
测试点#6.in 结果: 内存使用量: 256kB 时间使用量: 1ms
测试点#7.in 结果: 内存使用量: 256kB 时间使用量: 1ms
测试点#8.in 结果: 内存使用量: 256kB 时间使用量: 1ms
测试点#9.in 结果: 内存使用量: 256kB 时间使用量: 1ms
测试点#10.in 结果: 内存使用量: 256kB 时间使用量: 1ms
- Wikoi P1200 同余方程
- 线性同余方程
- 解同余方程
- 线性同余方程
- 线性同余方程
- 线性同余方程
- 一次同余方程
- poj2115 同余方程
- 同余方程
- NOIP2012 同余方程
- 【noip2012】同余方程
- BZOJ2995同余方程
- NOIP2012 同余方程
- NOIP2012D2T1 同余方程
- hdu1573 同余方程
- noip2012同余方程
- BSGS:同余方程
- [noip2012tg] 同余方程
- 鸟哥lunux入门-
- HDOJ 1166 敌兵布阵
- ios7版本 控件设置圆角
- android开发框架供参考
- 批处理入门介绍
- Wikoi P1200 同余方程
- JAVA里的空白\t\n\r\b\p分别代表什么?
- crackme.chm之Cruehead_1
- Linux下面C语言多文件编译
- cocos2d学习之CCLabelTTF
- Python 一个简单的MySQLdb封装类
- UVA - 507 Jill Rides Again 求最长子序列和
- web前端开发学习经验总结
- Thinking in Java阅读笔记(二)