CodeForces - 1359E Modular Stability (思维,数学)

题意:

[ 1 , n ] [1,n] [1,n]中选k个不同的数从小到大组成数组 a a a ,使得对于任意的数 x x x都满足:
在这里插入图片描述

后面为数组 a a a的全排列,求有多少种选法。

题解:

先说结论:只需满足 a 1 a_1 a1 为其他数的因子即可。

证明:

假设 a 2 a_2 a2不是 a 1 a_1 a1的因子 ,那么假设 x x x= a 2 a_2 a2 ,那么 x % a 1 % a 2 ! = 0 x \% a_1 \%a_2!=0 x%a1%a2!=0 ,但是 x % a 2 % a 1 = = 0 x \%a_2 \%a_1==0 x%a2%a1==0

再来看为什么为因子就行。假设 a 2 a_2 a2 a 3 a_3 a3 能整除 a 1 a_1 a1 那么 x % a 2 % a 3 % a 1 = ( x − x / a 2 ∗ a 2 ) % a 3 % a 1 x \% a_2 \%a_3 \%a_1 =(x-x/a_2*a_2) \%a_3 \%a_1 x%a2%a3%a1=(xx/a2a2)%a3%a1

− > -> > ( ( x − x / a 2 ∗ a 2 ) − ( x − x / a 2 ∗ a 2 ) / a 3 ∗ a 3 ) % a 1 = x % a 1 ((x-x/a_2*a_2)-(x-x/a_2*a_2)/a_3*a_3)\%a_1 =x\%a_1 ((xx/a2a2)(xx/a2a2)/a3a3)%a1=x%a1

那么最后答案就是 ∑ i = 1 n C ( n / i − 1 , k − 1 ) \sum\limits_{i=1}^{n} C(n/i-1,k-1) i=1nC(n/i1,k1)

代码:

#pragma GCC diagnostic error "-std=c++11"
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
#include<stack>
#include<set>
#include<ctime>
#define iss ios::sync_with_stdio(false)
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
typedef pair<int,int> pii;
const int mod=998244353;
const int MAXN=5e5+5;
const int inf=0x3f3f3f3f;
ll fac[MAXN];
void cal()
{
    fac[0]=1;
    for(int i=1; i<MAXN; i++)
        fac[i]=fac[i-1]*i%mod;
}
ll qpow(ll a,ll b)
{
    ll ans=1;
    for(; b; b>>=1,a=a*a%mod)
        if(b&1)
            ans=ans*a%mod;
    return ans;
}

ll C(ll n,ll m)
{
    if(n<m)
        return 0;
    return fac[n]*qpow(fac[n-m]*fac[m]%mod,mod-2)%mod;
}
int main()
{
    cal();
    int n,k;
    cin>>n>>k;
    ll ans=0;
    for(int i=1;i<=n;i++)
    {
        int cnt=n/i;
        ans=(ans+C(cnt-1,k-1))%mod;
    }
    printf("%lld\n",ans);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值