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; }