CF1359E Modular Stability 组合
分析一波发现如果一个序列合法,那么必须满足所有数都是最小值的倍数.
加上组合数就行了.
code:
#include <bits/stdc++.h>
#define ll long long
#define mod 998244353
#define N 500006
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int fac[N],inv[N];
int qpow(int x,int y)
{
int tmp=1;
for(;y;y>>=1,x=(ll)x*x%mod) if(y&1) tmp=(ll)tmp*x%mod;
return tmp;
}
int INV(int x) { return qpow(x,mod-2); }
void init()
{
fac[0]=inv[0]=1;
for(int i=1;i<N;++i) fac[i]=(ll)fac[i-1]*i%mod,inv[i]=INV(fac[i]);
}
int C(int x,int y) { return (x<y||x<0||y<0)?0:(ll)fac[x]*inv[y]%mod*inv[x-y]%mod; }
int main()
{
// setIO("input");
int n,k;
init();
scanf("%d%d",&n,&k);
int ans=0;
for(int i=1;i<=n;++i)
{
(ans+=(ll)C(n/i-1,k-1)%mod)%=mod;
}
printf("%d\n",ans);
return 0;
}

浙公网安备 33010602011771号