http://acm.hdu.edu.cn/showproblem.php?pid=6265
大胆猜测:这个函数是积性函数
F(n)=F(p1^k1) * F(p2^k2) * F(p3^k3) * …
原式:F(p^k) = p^(k-1) * (p+k*(p-1))
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod=998244353;
ll p[25],q[25];
ll qpow(ll a,ll p){
ll ans=1;
while(p>0){
if(p&1)ans=ans*a%mod;
p>>=1;
a=a*a%mod;
}
return ans;
}
void solve(){
int m;
ll n=1LL;//real num
scanf("%d",&m);
ll sumyin=1<<m;
ll sum=1LL;//yinzi sum
ll ans=1LL;
for(int i=0;i<m;i++){
scanf("%lld %lld",&p[i],&q[i]);
sum=(qpow(p[i],q[i]-1)%mod*(p[i]+q[i]*(p[i]-1)%mod))%mod;
ans=ans*sum%mod;
}
printf("%lld\n",ans);
}
int main(){
int t;
scanf("%d",&t);
while (t--)
solve();
return 0;
}
训练赛的时候被我当成公式化简题,,,,自闭4小时。
于是今天写个博客纪念一下
化简完去掉d,就剩下与d相关的p和n了。
我原定的想法是枚举p的所有组合。2的m次方种组合
对于每一种组合都有k1 * k2 * k3… * kj 个
于是 (1-1/p1) * (1-1/p2) * (1-1/p3)*…(1-1/pj) 个数n
但是很明显,这里的m是诱导你去枚举,然后TLE
所以,纪念一下咯!!