HDU 1576 A/B
2016-07-02 23:50
246 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1576
Total Submission(s): 3960 Accepted Submission(s): 3043
每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。
1000 53
87 123456789
6060
思路:费马小定理。假如p是质数,且(a,p)=1,那么a^(p-1)≡1(mod p)。即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。因为9973是质数,gcd(B, 9973)=1,所以B^(9973-1)≡1(mod 9973)。故结果为(A*B^(9973-2))%9973。详见代码。
附上AC代码:
#include <bits/stdc++.h>
//#pragma comment(linker, "/STACK:102400000, 102400000")
using namespace std;
typedef long long ll;
const int mod = 9973;
int a, b;
int qpow(int x, int n){
int ans = 1;
while (n){
if (n & 1)
ans = (1ll*(ans%mod)*(x%mod))%mod;
x = (1ll*(x%mod)*(x%mod))%mod;
n >>= 1;
}
return ans;
}
int main(){
#ifdef LOCAL
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int T;
scanf("%d", &T);
while (T--){
scanf("%d%d", &a, &b);
int ans = (1ll*a*qpow(b, mod-2))%mod;
printf("%d\n", ans);
}
return 0;
}
A/B
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3960 Accepted Submission(s): 3043
Problem 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
21000 53
87 123456789
Sample Output
79226060
Author
xhdSource
HDU 2007-1 Programming ContestRecommend
linle思路:费马小定理。假如p是质数,且(a,p)=1,那么a^(p-1)≡1(mod p)。即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。因为9973是质数,gcd(B, 9973)=1,所以B^(9973-1)≡1(mod 9973)。故结果为(A*B^(9973-2))%9973。详见代码。
附上AC代码:
#include <bits/stdc++.h>
//#pragma comment(linker, "/STACK:102400000, 102400000")
using namespace std;
typedef long long ll;
const int mod = 9973;
int a, b;
int qpow(int x, int n){
int ans = 1;
while (n){
if (n & 1)
ans = (1ll*(ans%mod)*(x%mod))%mod;
x = (1ll*(x%mod)*(x%mod))%mod;
n >>= 1;
}
return ans;
}
int main(){
#ifdef LOCAL
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int T;
scanf("%d", &T);
while (T--){
scanf("%d%d", &a, &b);
int ans = (1ll*a*qpow(b, mod-2))%mod;
printf("%d\n", ans);
}
return 0;
}
相关文章推荐
- 1.m分解阶乘之和
- 2.几种递推数
- 3.欧拉函数
- 4.快速幂模m算法
- 5.扩展欧几里得&&中国剩余定理
- 6.数论_web
- Project Euler Problem 387 - Harshad Numbers - 深度优先
- 【HDU 5366】The mook jong 详解
- 【HDU 2136】Largest prime factor 详细图解
- 【HDU 1568】Fibonacci 数学公式 详解
- HDU 1568
- HDU1290
- 编程之美2015初赛A
- HDU1568(Fobonacci公式)
- HDU ACM Step 2.2.2 Joseph(约瑟夫环问题)
- HDU 1405
- HDU 1297
- hdu 1205
- hdu 2087
- hdu 1016