I won't tell you this is about number theory
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 376 Accepted Submission(s): 103
Problem Description
To think of a beautiful problem description is so hard for me that let's just drop them off. :)
Given four integers a,m,n,k,and S = gcd(a^m-1,a^n-1)%k,calculate the S.
Given four integers a,m,n,k,and S = gcd(a^m-1,a^n-1)%k,calculate the S.
Input
The first line contain a t,then t cases followed.
Each case contain four integers a,m,n,k(1<=a,m,n,k<=10000).
Each case contain four integers a,m,n,k(1<=a,m,n,k<=10000).
One line with a integer S.
1 1 1 1 1
0
Source
题目大意:求gcd(a^m-1,a^n-1)%k
题目分析:
更一般的公式:
gcd(A, B) = 1 => gcd(A^m - B^m,A^n - B^n)= A^gcd(m,n) - B^gcd(m,n)
#include <cstdio>
int a, m, n, MOD;
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
int qpow(int x, int n)
{
int res = 1;
while(n)
{
if(n & 1)
res = (res * x) % MOD;
x = (x * x) % MOD;
n >>= 1;
}
return res;
}
int main()
{
int T;
scanf("%d", &T);
while(T --)
{
scanf("%d %d %d %d", &a, &m, &n, &MOD);
printf("%d\n", (MOD + qpow(a, gcd(n, m)) % MOD - 1 % MOD) % MOD);
}
}