C~K的难题
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss
Problem Description
众所周知 C~K 喜欢数学,但是他最近被一个题给难住了,题目是这样的。
要求 (A/B)%10007,但由于 A 很大,我们只给出 n (n = A%10007)(我们给定的A必能被B整除,且 gcd(B,10007) = 1)。
你能帮助他解答吗?他会很感谢你的。
Input
数据的第一行是一个 T,表示有 T 组数据。
每组数据有两个数 n (0 <= n < 10007) 和 B (1 <= B <= 10^9)。
Output
对应每组数据输出 (A/B)%10007。
Example Input
2
1000 53
87 123456789
Example Output
8893
7424
费马小定理(Fermat’s little theorem)是数论中的一个重要定理,其内容为: 假如p是质数,且gcd(a,p)=1,那么 a(p-1)≡1(mod p),即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。(百度)
同余与模算数
(a+b)modn = ((amodn)+(bmodn))modn;
(a-b)modn = ((amodn)-(bmodn)+n)modn;
(a*b)modn = ((amodn)*(bmodn))modn;
#include <bits/stdc++.h>
#define mod 10007
using namespace std;
long long int pow2(long long int a, long long int b)//a的b次方,和矩阵的快速幂类似(幂取模)
{
long long int ans = 1;
while(b)
{
if(b&1)
ans = ans * a % mod;
a = a * a % mod;
b>>=1;
}
return ans;
}
int main()
{
long long int n, m, t;
cin>>t;
while(t--)
{
cin>>n>>m;
long long int k = pow2(m, mod-2);//费马小定理
cout<<k*n%mod<<endl;
}
return 0;
}