HDU 1576 (A/B)扩展欧几里德定理
2016-09-11 11:22
513 查看
Time Limit:1000MS Memory Limit:32768KB 64bit
IO Format:%I64d & %I64u
HDU
1576
Description
要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。
Input
数据的第一行是一个T,表示有T组数据。
每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。
Output
对应每组数据输出(A/B)%9973。
Sample Input
Sample Output
根据扩展欧几里德定理可以得出 形如Ax+By=gcd(A, B)的一组特解
{
x0 = x + t * B / gcd(A, B),
y0 = y - t * A / gcd(A, B);
}
来自百度:扩展欧几里德定理
编辑
对于不完全为 0 的整数 a,b,gcd(a,b)表示 a,b 的最大公约数。那么一定存在整
数 x,y 使得 gcd(a,b)=ax+by。
根据gcd(B, 9973) = 1 可以得出 Bx + 9973y = 1 ;
再根据n = A % 9973, X = A / B; Y = A / 9973;
n = A - A /9973 * 9973; n = X * B - Y * 9973;
观察上下两式, 相差一个n; So 最后得到的X只要乘以n然后
(x * n % Mod + Mod) % Mod ;就ok了;
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 100005;
const int Mod = 9973;
typedef long long LL;
int x, y;
void Extend_gcd(int a, int b)
{
if(b==0)
{
x = 1;
y = 0;
return ;
}
Extend_gcd(b, a%b);
int t = x ;
x = y;
y = t - (a/b) * y;
}
int main()
{
int n, B, t;
scanf("%d", &t);
while(t--)
{
scanf("%d %d", &n, &B);
Extend_gcd(B, Mod);
printf("%d\n", (x * n % Mod + Mod) % Mod);
}
}
IO Format:%I64d & %I64u
HDU
1576
Description
要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。
Input
数据的第一行是一个T,表示有T组数据。
每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。
Output
对应每组数据输出(A/B)%9973。
Sample Input
2 1000 53 87 123456789
Sample Output
7922 6060
根据扩展欧几里德定理可以得出 形如Ax+By=gcd(A, B)的一组特解
{
x0 = x + t * B / gcd(A, B),
y0 = y - t * A / gcd(A, B);
}
来自百度:扩展欧几里德定理
编辑
对于不完全为 0 的整数 a,b,gcd(a,b)表示 a,b 的最大公约数。那么一定存在整
数 x,y 使得 gcd(a,b)=ax+by。
根据gcd(B, 9973) = 1 可以得出 Bx + 9973y = 1 ;
再根据n = A % 9973, X = A / B; Y = A / 9973;
n = A - A /9973 * 9973; n = X * B - Y * 9973;
观察上下两式, 相差一个n; So 最后得到的X只要乘以n然后
(x * n % Mod + Mod) % Mod ;就ok了;
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 100005;
const int Mod = 9973;
typedef long long LL;
int x, y;
void Extend_gcd(int a, int b)
{
if(b==0)
{
x = 1;
y = 0;
return ;
}
Extend_gcd(b, a%b);
int t = x ;
x = y;
y = t - (a/b) * y;
}
int main()
{
int n, B, t;
scanf("%d", &t);
while(t--)
{
scanf("%d %d", &n, &B);
Extend_gcd(B, Mod);
printf("%d\n", (x * n % Mod + Mod) % Mod);
}
}
7922 6060
相关文章推荐
- hdu 1576 扩展欧几里得
- HDU 1576 A/B 暴力也能过。扩展欧几里得
- hdu 1576 扩展欧几里得
- 数论-hdu-1576-A/B-逆元-扩展欧几里得
- hdu 1576 A/B (扩展欧几里德简单运用)
- hdu 1576 A/B 扩展欧几里德
- HDU 1576 A/B 【带简单处理的扩展欧几里得】
- HDU 1576 A/B(欧几里得扩展)
- hdu1576 A/B 扩展欧几里得求逆元
- HDU 1576 A/B 扩展欧几里得
- HDU 1576 A/B 扩展欧几里德算法 模线性方程入门题
- HDU 1576 A/B(扩展欧几里德变形)
- hdu 1576 A/B(扩展欧几里得)
- 扩展欧几里得,逆元初识(poj 1061+codeforce 7C line+hdu 1576 A/B)
- HDU 1576 A/B (扩展欧几里得)
- HDU 1576 扩展欧几里得
- HDU 1576扩展欧几里德(2013.10.20周赛D题)
- HDU 1576 A/B (扩展欧几里得应用)
- HDU 1576 A/B (逆元求扩展欧几里得)
- 扩展欧几里得算法的应用 POJ 2115 POJ 2142 POJ 1061 HDU 2669 HDU 1576 SGU 106