ZOJ
来源:互联网 发布:视频加速器软件 编辑:程序博客网 时间:2024/06/05 17:35
考查扩展欧几里德
// 数论-扩展欧几里德#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <vector>#include <string>#include <queue>#include <stack>#include <algorithm>#define INF 0x7fffffff#define EPS 1e-12#define MOD 1000000007#define PI 3.141592653579798#define N 100000using namespace std;typedef long long LL;LL e_gcd( LL a, LL b, LL &x, LL &y ) { if( b == 0 ) { x = 1; y = 0; return a; } LL ans = e_gcd( b, a % b, x ,y ); LL temp = x; x = y; y = temp - a / b * y; return ans;}LL cal( LL a, LL m, LL c ) { LL x, y; LL gcd = e_gcd( a, m, x, y ); // 判断求得的最大公约数gcd是否是1 if( c % gcd != 0 ) return -1; x = x * ( c / gcd ); m = m / gcd; if( m < 0 ) m = -m; LL ans = x % m; if( ans <= 0 ) ans = ans + m; return ans;}int main() { int T; scanf( "%d", &T ); while( T-- ) { LL a, m; scanf( "%lld%lld", &a, &m ); LL ans = cal( a, m, 1 ); if( ans == -1 ) printf( "Not Exist\n" ); else printf( "%lld\n", ans ); } return 0;}
0 0