标签:除法 欧几里得算法 情况下 article 博客 无法 地址 for uri
int gcd(int a, int b) //a大于b
{
return a % b == 0 ? b : gcd(b, a % b);
}
int Lcm(int a,int b)
{
return a/gcd(a,b)*b;
}
费马小定理(Fermat Theory)是数论中的一个重要定理,其内容为:假设p是质数(素数),且
Gcd(a,p)=1,那么a^(p-1) ≡1(mod p)。即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。该定理是1636年皮埃尔·德·费马发现的。
算术基本定理,又称为正整数的唯一分解定理,即:每个大于1的自然数均可写为质数的积,而且这些素因子按大小排列之后,写法仅有一种方式。(素数的分解方法唯一)
G - Pairs Forming LCM(例题)
当求解公式:(a/b)%m 时,因b可能会过大,会出现爆精度的情况,所以需变除法为乘法:
设c是b的逆元,则有bc≡1(mod m);
则(a/b)%m = (a/b)1%m = (a/b)bc%m = ac(mod m);
即a/b的模等于ab的逆元的模;
逆元就是这样应用的
在是素数的情况下,对任意整数都有。 如果无法被整除,则有。 可以在为素数的情况下求出一个数的逆元,,即为逆元。
题目中的数据范围1<=x<=10^9,p=1000000007,p是素数;
所以x肯定就无法被p整除啊,所以最后就得出x^(p-2)为x的逆元啦。
复杂度O(logn)
const int mod = 1000000009;
long long quickpow(long long a, long long b) {
if (b < 0) return 0;
long long ret = 1;
a %= mod;
while(b) {
if (b & 1) ret = (ret * a) % mod;
b >>= 1;
a = (a * a) % mod;
}
return ret;
}
long long inv(long long a) {
return quickpow(a, mod - 2);
}
本文来自 Here_jiaxinwei 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/baidu_35643793/article/details/75268911?utm_source=copy
标签:除法 欧几里得算法 情况下 article 博客 无法 地址 for uri
原文地址:https://www.cnblogs.com/gzr2018/p/9716225.html