[题解]CF1712E1 LCM Sum (easy version)

思路

这是一道极好的思维题,主要考察了:组合数学和正难则反的方法。

这题可以发现如果用直接法将十分的繁琐,于是乎,我们可以用正难则反的方法,即:总的减去不满足的。

这道题总的很好求,为:Crl+13

不满足的情况,我们就可以将题目转化为:lcm(i,j,k)<i+j+k 的个数。

因为 li<j<kr,所以 lcm(i,j,k)<3k

又因为 k 必定是 lcm(i,j,k) 的因数,所以,我们的情况就可以分为二种。

  1. lcm(i,j,k)=k
  2. lcm(i,j,k)=2k

第一种情况时,我们可以枚举 k 在区间 [l,r] 中不为本身的约数的个数,我们令这个数为:cnt。那么它的贡献就为:Ccnt2

第二种情况时,只有为 (3,4,6)(6,10,15) 的整数倍时,才会有成立。

Code

#include <bits/stdc++.h>  
#define int long long  
#define re register  
  
using namespace std;  
  
int T,l,r,ans;  
  
inline int read(){  
    int r = 0,w = 1;  
    char c = getchar();  
    while (c < '0' || c > '9'){  
        if (c == '-') w = -1;  
        c = getchar();  
    }  
    while (c >= '0' && c <= '9'){  
        r = (r << 3) + (r << 1) + (c ^ 48);  
        c = getchar();  
    }  
    return r * w;  
}  
  
signed main(){  
    T = read();  
    while (T--){  
        ans = 0;  
        l = read();  
        r = read();  
        for (re int k = l + 2;k <= r;k++){//因为 i < j < k,所以 k 要从 l + 2 开始枚举   
            int cnt = 0;  
            for (re int i = 1;i * i <= k;i++){//只用枚举到 sqrt(k),因为对于 k 的约数,最大只会到 sqrt(k)。为了避免浮点数丢失精度,要用乘法   
                if (!(k % i)){  
                    if (i >= l) cnt++;  
                    if (i != 1 && i * i != k && (k / i) >= l) cnt++;//注意不要把自己算进去了   
                }  
            }  
            cnt = cnt * (cnt - 1) >> 1;  
            ans += cnt;  
        }  
        for (re int i = 1;i <= r;i++){  
            if (l <= 3 * i && 6 * i <= r) ans++;//判断是否在区间当中   
            if (l <= 6 * i && 15 * i <= r) ans++;  
        }  
        ans = (r - l + 1) * (r - l) / 2 * (r - l - 1) / 3 - ans;  
        printf("%lld\n",ans);  
    }  
    return 0;  
}  

作者:WaterSun

出处:https://www.cnblogs.com/WaterSun/p/18264799

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   WBIKPS  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示