Educational Codeforces Round 13 C. Joty and Chocolate(最小公倍数)

地址:https://codeforces.com/problemset/problem/678/C

     题意:1~n的瓷钻,给它们染色。能被a整除就red,能被b整除就blue。每一个red可以得p块巧克力,每一个blue可以得q块巧克力,求最大所得巧克力数。

     解析:能被a整除就p,被b整除就q。但是有一部分是可以同时被p,q整除,所以肯定选max(p,q)。先把所有a部分和b部分算出来,这俩有重合部分,这个重合部分求一下a,b的最小公倍数,减掉min(p,q)*(n/最小公倍数)就可以了。总的公式就是:n/a+n/b-min(p,q)*(n/gd(a,b))。

      a,b的最小公倍数就是a*b/两者的最大公因数~

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){
    return b?gcd(b,a%b):a;
}
int main()
{
    ll n,a,b,p,q;
    cin>>n>>a>>b>>p>>q;
    ll m1=p*(n/a),m2=q*(n/b);
    ll gcdd=a*b/gcd(a,b);
    ll pq=min(p,q);
    cout<<m1+m2-pq*(n/gcdd)<<endl;
}
原文地址:https://www.cnblogs.com/liyexin/p/12595583.html