3 条题解

  • 1

    神人T2赛时卡我20分钟,写题解卡我20分钟。

    很简单,用容斥原理,分别计算 ccdd 以及 lcm(c,d)\operatorname{lcm}(c,d)[a,b][a,b] 的倍数数量(记为cntc,cntd,cntcdcnt_c,cnt_d,cnt_{cd}),然后答案为:

    ba+1cntccntd+cntcdb-a+1-cnt_c-cnt_d+cnt_{cd}

    温馨提醒:

    • 不开long long见祖宗;
    • 没判断aa是否是c,d,lcm(c,d)c,d,\operatorname{lcm}(c,d)倍数(也就是代码的a-1写成a的)会很惨。
    #include <bits/stdc++.h>
    using namespace std;
    long long a,b,c,d;
    long long lcm(long long a,long long b){
    	return a/__gcd(a,b)*b;
    }
    int main(){
    	cin>>a>>b>>c>>d;
    	long long c_lcm=b/c-((a-1)/c);
    	long long d_lcm=b/d-((a-1)/d);
    	long long cd_lcm=b/(lcm(c,d))-((a-1)/lcm(c,d));
    	cout<<b-a-c_lcm-d_lcm+cd_lcm+1;
    	return 0;
    }
    
    
    • 1

      #include<bits/stdc++.h> using namespace std; #define ll long long ll a,b,c,d; ll lcm(ll x,ll y){ return x*y/__gcd(x,y); } int main(){ cin>>a>>b>>c>>d; cout<<b-a-b/c-b/d+b/lcm(c,d)+(a-1)/c+(a-1)/d-(a-1)/lcm(c,d)+1; return 0; }

      • 1

      信息

      ID
      899
      时间
      1000ms
      内存
      256MiB
      难度
      7
      标签
      (无)
      递交数
      48
      已通过
      12
      上传者