代码
#include <iostream>
#include <unordered_map>
using namespace std;
typedef long long LL;
const int mod = 1e9 + 7;
int main()
{
int n;
cin >> n;
unordered_map<int, int> primes;
while (n--) {
int x;
cin >> x;
for (int i = 2; i <= x / i; i++) {
while (x % i == 0) {
x /= i;
primes[i]++;
}
}
if (x > 1) {
primes[x]++;
}
}
LL res = 1;
for (auto p : primes) {
LL a = p.first, b = p.second; // a, b -> 底数和指数
// 秦九昭算法
// 求 p^b+p^(b-1)+....+p^1+1
LL t = 1;
while (b--) {
t = (t * a + 1) % mod;
}
res = (res * t) % mod;
}
cout << res << endl;
return 0;
}
你好我想请问一下 t = (t * a + 1) % mod; 这里模mod不会改变t原本的值吗,(ab)%mod=(a%mod)(b%mod)我知道,可是这里t*a还+1了,为什么没有关系啊
(a + b) % p = (a % p + b % p) % p (1)
(a - b) % p = (a % p - b % p) % p (2)
(a * b) % p = (a % p * b % p) % p (3)
a ^ b % p = ((a % p)^b) % p (4)
结合律:
((a+b) % p + c) % p = (a + (b+c) % p) % p (5)
((ab) % p * c)% p = (a * (bc) % p) % p (6)
交换律:
(a + b) % p = (b+a) % p (7)
(a * b) % p = (b * a) % p (8)
分配律:
((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p (9)
感谢大哥贡献的解释,前面几个都没看明白在写啥,主要是字母的代数不标明是啥意思就很难看懂,老师直接丢公式开始讲也蛮让人懵逼的,这下舒服了。点个赞。
能帮助到你, 我很开心_(:з」∠)_