欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2017ccpc杭州 B. Master of Phi(hdu6265 公式推导)

程序员文章站 2022-04-27 13:57:38
...

2017ccpc杭州 B. Master of Phi(hdu6265 公式推导)

2017ccpc杭州 B. Master of Phi(hdu6265 公式推导) 2017ccpc杭州 B. Master of Phi(hdu6265 公式推导)

 题意:求 2017ccpc杭州 B. Master of Phi(hdu6265 公式推导)2017ccpc杭州 B. Master of Phi(hdu6265 公式推导)

方法一:

由 2017ccpc杭州 B. Master of Phi(hdu6265 公式推导)  可得 2017ccpc杭州 B. Master of Phi(hdu6265 公式推导) ,枚举m个素数的组合,预处理 2017ccpc杭州 B. Master of Phi(hdu6265 公式推导),复杂度 2017ccpc杭州 B. Master of Phi(hdu6265 公式推导)

跑的挺快的,不算卡过吧?

方法二:

推公式,咕咕咕

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
int p[25], q[25];
ll pp[25];

ll qpow(ll a, ll b){
	ll ans = 1;
	while(b > 0){
		if(b & 1){
			ans = ans * a % mod;
		}
		a = a * a % mod;
		b >>= 1;
	}
	return ans % mod;
}

int m;
ll ans, n;

void dfs(int now, ll res) {
    if(now == m + 1) {
        ans = (ans + res) % mod;
        return ;
    }
    dfs(now + 1, res);
    dfs(now + 1, res * pp[now] % mod);
}

signed main()
{
	int t;
	scanf("%d", &t);
	while(t--) {
		ans = 0;
		n = 1;
		scanf("%d", &m);
		for(int i = 1; i <= m; i++) {
			scanf("%d%d", &p[i], &q[i]);
			n = n * qpow(1ll * p[i], 1ll * q[i]) % mod;
		}
        for(int i = 1; i <= m; ++i)
            pp[i] = (p[i] - 1) * qpow(1ll * p[i], mod - 2) % mod * q[i] % mod;
		dfs(1, 1);
		printf("%lld\n", n * ans % mod);
	}
}

 

相关标签: 数论