抱歉,题解没时间写了
#include
using namespace std;
#define ll long long
#define A 6666666
#define mod 998244353
ll jie[A],ni[A],acnt[A],bcnt[A];
ll fheng[A],fshu[A];
ll n,m,a,b;
ll meng(ll x,ll k){
ll ans=1;
for(;k;k>>=1,x=x*x%mod)
if(k&1)
ans=ans*x%mod;
return ans;
}
ll C(ll x,ll y){
return jie[x]*ni[x-y]%mod*ni[y]%mod;
}
int main(){
// freopen("a_sample2.in","r",stdin);
scanf("%lld%lld%lld%lld",&n,&m,&a,&b);
a%=mod,b%=mod;
jie[0]=1;ni[0]=1;
acnt[0]=bcnt[0]=1;
for(ll i=1;i<=n+m;i++)
jie[i]=jie[i-1]*i%mod,acnt[i]=acnt[i-1]*a%mod,bcnt[i]=bcnt[i-1]*b%mod;
ni[n+m]=meng(jie[n+m],mod-2);
for(ll i=n+m-1;i>=1;i--)
ni[i]=ni[i+1]*(i+1)%mod;
for(ll i=1;i<=n;i++)
scanf("%lld",&fheng[i]),fheng[i]%=mod;
for(ll j=1;j<=m;j++)
scanf("%lld",&fshu[j]),fshu[j]%=mod;
ll ans=0;
for(ll i=n;i>=1;i--){
// printf("acnt=%lld bcnt=%lld ")
// printf("fheng[]=%lld n-i+m=%lld m=%lld i=%lld c=%lld acnt=%lld bcnt=%lld\n",fheng[i],n-i+m,m,i,C(n-i+m,m),acnt[m],bcnt[n-i]);
ans=(ans+fheng[i]*((acnt[m]%mod*bcnt[n-i]%mod)%mod)%mod*C(n-i+m-1,m-1)%mod)%mod;
}
for(ll i=1;i<=m;i++){
// printf("fheng[]=%lld n-i+m=%lld m=%lld i=%lld c=%lld acnt=%lld bcnt=%lld\n",fshu[i],n-i+m,m,i,C(n-i+m,m),acnt[m-i],bcnt[n]);
ans=(ans+fshu[i]*((acnt[m-i]%mod*bcnt[n]%mod)%mod)%mod*C(n-i+m-1,n-1)%mod)%mod;
}
printf("%lld\n",ans);
}
题目中说求$\sum\limits_{i=1}^{i<=n}(-1)^{\sum\limits_{j=1}^{j<=m} d(i*j)}$ $d$表示约数个数
$(-1)^{\sum\limits_{j=1}^{j<=m} d(i*j)}$只和奇偶性有关,如果$d(i*j)$为偶数,那么它是没用,偶+偶=偶,偶+奇=奇
那么只考虑约数个数为奇就可以了,发现约数个数为奇当且仅当为完全平方数
我们把$i$ 拆成 $p*q^2$($p$ 没有平方因子),那 $j$ 必须有 $p*r^2$ 的形式,所以对于每个 $i$,都有 $sqrt(\frac{m}{p})$ 个 $j$ 产生贡献。
可以埃筛(需要卡常)可以线筛
我用的埃筛
#include
using namespace std;
#define ll int
#define A 11111111
long long m,n,ans;
ll a[A];
int main(){
scanf("%lld%lld",&n,&m);
for(ll i=1;i<=n;i++)
a[i]=i;
ll haha=sqrt(n);
for(ll i=haha;i>=2;i--){
ll now=i*i;
for(ll j=now;j<=n;j+=now){
while(a[j]%now==0)
a[j]/=now;
}
}
for(ll i=1;i<=n;i++){
long long now=m/a[i];
now=sqrt(now);
if(now&1) ans--;
else ans++;
}
printf("%lld\n",ans);
}
$t1$沉迷打表
范围很大,我觉得可能是$n+m$的
我总觉得$f[n][m]$可拆,拆成$w1*(?*a*?*b)*f[n][0]+w2*(?*a*?*b)f[n-1][0]+…….w.*(?*a*?*b)f[0][m]$
$?$很简单,可以推出来$a$,$b$系数,然后我就开始推总体系数$w$
然后我就打了$75$分钟表,
当然也有一丁点收获
1
1 2
1 3 6
1 4 10 20
1 5 15 35 70
1 6 21 56 126 252
1 7 28 84 210 462 924
$update$
这个表就是组合数表,呵呵.终于认清自己傻逼本质
一直到$20$行我只截取了7行
然而并没有什么卵用,
这个式子屁用没有
然后开始想$t2$
$t2$让我想起了
God Knows
然后我开始想$区间dp$
然后我想了很长时间,依然没有任何收获
转移起来跟.一样
然后看$t3$,
手机扫一扫
移动阅读更方便
你可能感兴趣的文章