Reverse Card (Easy Version)Codeforces Round 942 (Div. 2 D1)题解

学到的内容

若a是b的倍数则gcd(a,b)=b

题解

设d=gcd(a,b)

a+b能整除b*d,则 a+b能够整除b

\boldsymbol{}\frac{}{}\frac{a+b}{b*d}化为\frac{\frac{a}{b}+1}{d}  则要满足条件,需要满足1.a是b的倍数,为k倍.2,k+1能整除d

a是b的倍数,则gcd(a,b)=b,式子变为\frac{\frac{a}{b}+1}{b}

则枚举每个b,对于每个b,1~n有n/b个a是b的倍数, 倍数为1~n/b  则\frac{\frac{a}{b}+1}{b}中分子的范围为2~n/b+1

对于b=1, 满足题意的a的个数为n

对于b!=1,每个b, 1~n/b+1中能使\frac{\frac{a}{b}+1}{b}为整数的个数为 (n/b+1)/b  因为1不可能是b的倍数,则2~n/b+1中使式子为整数的个数也为 (n/b+1)/b 

#include<iostream>
using namespace std;
int main(){
    int T;
    cin>>T;
    while(T--){
        int n,m;
        cin>>n>>m;
        long long ans=n;
        for(int i=2;i<=m;i++){
            int t=(n/i+1)/i;
            ans+=t;
        }
        cout<<ans<<endl;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值