一个很大的数(计数、思维)

题意

我有一个数\(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;
}
posted @ 2022-03-31 10:00  pbc的成长之路  阅读(37)  评论(0编辑  收藏  举报