时间:1s 空间:128M
题目描述:
从1到n有n块砖需要刷油漆,砖的编号被a整除的要被刷成红色,被b整除的被刷成蓝色,同时被a,b整除的既可以被刷成红色,也可以被刷成蓝色。等你刷完后,对于每块红色的砖,老板会奖励给你p个巧克力,对于每块蓝色的砖,老板奖励q个巧克力,问你最多能得到多少巧克力
输入格式:
输入五个整数n,a,b,p,q
输出格式:
输出一个整数
样例输入1:
5 2 3 12 15
样例输出1:
39
样例输入2:
20 2 3 3 5
样例输出2:
51
约定:
1<=n,a,b,p,q<=10^9
提示:
本题主要是抓住同时被A、B整除的砖块,让它们得到更多的巧克力。所以要求最小公倍数。可以用C++的STL轻松解决。具体代码如下:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std ;
int main ( )
{
long long n , a , b , p , q ;
scanf ( "%lld %lld %lld %lld %lld" , & n , & a , & b , & p , & q ) ;
long long k = __gcd ( a , b ) ; //求最大公因数
k = a * b / k ; //求最小公倍数
k = n / k ;
a = ( n / a - k ) * p ;
b = ( n / b - k ) * q ;
k = max ( p , q ) * k ;
printf ( "%lld" , a + b + k ) ;
return 0 ;
}
相关链接:
XJOI 题解小全:
https://blog.csdn.net/zj_mrz/article/details/80949787
XJOI 1210 二项式展开 题解:
https://blog.csdn.net/zj_mrz/article/details/80969339