hrbust 哈理工oj 1921 三原色(改进版)【集合相关问题】
2016-02-17 13:16
393 查看
三原色(改进版) | ||||||
| ||||||
Description | ||||||
Dream、Griselda 还有 Sunshine正打算装饰一下集训队的墙,为了省钱,她们决定只买三原色的染料,这样就可以花费很少的钱,得到所有的颜色了O(∩_∩)O~ 最初她们把墙分成了n块,编号分别为1,2,3,……n。 Dream、Griselda、sunshine分别喜欢数字x,y,z,她们只涂编号为她们喜欢的数字的倍数的墙,例如: Griselda 喜欢数字3,所以Griselda只涂编号是3,6,9,12……那些墙; 涂完之后,问这n块墙中有多少是单色调的? | ||||||
Input | ||||||
本题有多组测试数据,每组测试数据输入四个正整数x,y,z,n其中满足 (0<x,y,z<=1000;0<n<=10^9)。 | ||||||
Output | ||||||
对于每组测试数据输出一个数字,即单色调的墙块总数。 | ||||||
Sample Input | ||||||
1 2 3 4 6 2 4 1000 | ||||||
Sample Output | ||||||
1 667 | ||||||
Hint | ||||||
每个人分别有一种颜色的染料,不允许互相借用染料等。 |
我们假设青,品红和黄色就是题干中的x,y,z,那么我们先减掉两个颜色重叠的部分的时候,一共减去了两次黑色的部分、所以在最后我们应该加上、对应AC代码通俗易懂:
#include<stdio.h>
#include<string.h>
using namespace std;
#define ll long long int
ll gcd(ll x,ll y)
{
return y==0?x:gcd(y,x%y);
}
ll lcm(ll x,ll y)
{
return x*y/gcd(x,y);
}
int main()
{
ll x,y,z,n;
while(~scanf("%lld%lld%lld%lld",&x,&y,&z,&n))
{
ll a=lcm(x,y);
ll b=lcm(x,z);
ll c=lcm(y,z);
ll d=lcm(a,z);
ll output=n/a+n/b+n/c-2*(n/d);
printf("%lld\n",n-output);
}
}
相关文章推荐
- setBackgroundDrawable提示:The method setBackgroundDrawable(Drawable) from the type View is deprecated
- 计蒜客 Python课程 A+B+C问题
- Gson 转对象
- 关于工程导入eclipse中的问题
- sql查询重复记录、删除重复记录方法大全
- 基于近场通信的WiFi传输连接方案
- IIS7.5 提示未在本地计算机上注册“Microsoft.Jet.OleDb.4.0”提供程序
- 深入分析js中的constructor 和prototype
- YUM 包管理器的使用
- 开发阶段总结
- 获取assets,res,内部存储,外部存储
- 控制器生命周期方法(LifeCycle)
- Linux下clock计时函数学习
- 架设内部yum服务器
- mysql主从环境搭建
- tcpdump command, iplog 设置大小,文件循环写
- 生成XML
- NSLocale
- 逆向x64-small-trick
- struts2学习笔记--使用struts2插件实现ajax处理(返回json数据)