一个很大的数(计数、思维)
题意
我有一个数\(x\),但这里空白太小写不下,将\(x\)表示为
\(x=\prod_{i=1}^{n}p_i^{c_i}\)
其中\(p_i\)为素数且互不相同
\(T\)组测试用例,输出\(x\)的因子有多少对互质
数据范围
\(n \leq 1e4\)
\(1 \leq p_i, c_i \leq 1e9\)
\(T\leq 100\)
思路
对于一个互质的因子对\((a,b)\)
每种因子只能分配给\(a\)或分配给\(b\),或者均不分配
故每种因子有\(2c_i+1\)种分配方案:\((0, 0), (1, 0)\dots (c_i,0), (0,1)\dots (0, c_i)\)
\(ans = \prod_{i=1}^{n}(2c_i + 1)\)
代码
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
int main()
{
int T;
scanf("%d", &T);
while(T --) {
ll ans = 1;
int n;
scanf("%d", &n);
for(int i = 1; i <= n; i ++) {
ll p, c;
scanf("%lld%lld", &p, &c);
ans = (ans * (2 * c + 1)) % mod;
}
printf("%lld\n", ans);
}
return 0;
}