UVA 11889 - Benefit 可直接枚举
题目大意:
输入两个整数A和C,求最小的整数B,使得lcm(A,B)=C。如果无解,输出NO SOLUTION
思路:
A*B=C*gcd(A,B)
所以 B / gcd(A,B) = C / A
如果C / A不是整数,那么就无解。
不然B 一定是C / A 的整数倍。(都是整数嘛)
#include<cstdio>
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int a,c,ans;
scanf("%d%d",&a,&c);
bool ok=false;
if(c%a==0)
{
int target=c/a;
for(int i=target;i<=c;i+=target)
{
if(i/gcd(i,a)==target)
{
ok=true;
ans=i;
break;
}
}
}
if(ok)
printf("%d\n",ans);
else printf("NO SOLUTION\n");
}
}
这个方法多久呢?
| 12180501 | 11889 | Benefit | Accepted | C++ | 0.605 | 2013-08-08 14:55:25 |
嗯,觉得太慢了?还有更快的!
B / gcd(A,B) = C / A 对于B,每次多/了个最大公约数,我们把它*回去,并把A缩小 ,(就是说把B扩大他们的公约数倍,A缩小,当他们的公约数为1的时候就是说LCM(A,B)=A*B)
详见代码:
| 12180487 | 11889 | Benefit | Accepted | C++ | 0.062 | 2013-08-08 14:52:08 |
#include<cstdio>
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int a,c,ans;
scanf("%d%d",&a,&c);
bool ok=false;
if(c%a!=0)
printf("NO SOLUTION\n");
else
{
int b=c/a;
int temp;
do
{
temp=gcd(b,a);
b*=temp;
a/=temp;
}
while(temp!=1);
printf("%d\n",b);
} }
}
UVA 11889 - Benefit 可直接枚举的更多相关文章
- UVa 11889 Benefit(数论)
题目链接: 传送门 Benefit Time Limit: 5000MS Memory Limit: 32768 KB Description Recently Yaghoub is play ...
- UVA 11889 Benefit
题意: lcm(a, b) = c; c是a,b的最小共倍数, 现在给出a, c, 要你求出最小的b. 解题思路: 1. 如果c%a != 0 表示无解. 设b = c/a; 当gcd ...
- Uva 11889 Benefit (lcm与gcd)
题意:给你两个数,a,c,求出 lcm(a,b)==c 时的 b 的最小值 思路:我们知道一个性质 gcd(a,b)*lcm(a,b) = a*b 由此我们可以得到 b = gcd(a,b)*lcm( ...
- UVA 1508 - Equipment 状态压缩 枚举子集 dfs
UVA 1508 - Equipment 状态压缩 枚举子集 dfs ACM 题目地址:option=com_onlinejudge&Itemid=8&category=457& ...
- UVA.12716 GCD XOR (暴力枚举 数论GCD)
UVA.12716 GCD XOR (暴力枚举 数论GCD) 题意分析 题意比较简单,求[1,n]范围内的整数队a,b(a<=b)的个数,使得 gcd(a,b) = a XOR b. 前置技能 ...
- UVa 11889 (GCD) Benefit
好吧,被大白书上的入门题给卡了.=_=|| 已知LCM(A, B) = C,已知A和C,求最小的B 一开始我想当然地以为B = C / A,后来发现这时候的B不一定满足gcd(A, B) = 1 A要 ...
- Benefit UVA - 11889(已知LCM和其中一个数,求另一个数)
首先对于C不能整除A的状况肯定排除 然后得到B=C/A 然后取G=GCD(A,B) 如果G==1,那么此时B就是解 否则的话,就证明A,B,的最小公倍数肯定不是C,因为其最小公倍数是A*B/G 那么我 ...
- uva 1560 - Extended Lights Out(枚举 | 高斯消元)
题目链接:uva 1560 - Extended Lights Out 题目大意:给定一个5∗6的矩阵,每一个位置上有一个灯和开关,初始矩阵表示灯的亮暗情况,假设按了这个位置的开关,将会导致周围包含自 ...
- UVa 11825 - Hackers' Crackdown DP, 枚举子集substa = (substa - 1)&sta 难度: 2
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
随机推荐
- vim 基础学习之插入模式
插入模式1.字符编码,插入特殊字符 <C-v>{3位} 如,你想输入A,你可以在输入模式下<C-v>065(必须是3位) <C-v>u{4位} 如,你想输入¿,你可 ...
- vim-插入格式化时间
最近一直在搞vimrc的配置.其中有一点就是,我想要实现代码快速注释的功能.而这个功能中的一个关键点就是,我要获得系统当前的时间,然后插入到我的注释里面.我知道vimrc支持shell命令,既使用:r ...
- region实现大纲效果
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- hbase xshell
用Xshell登陆linux主机后,在hbase shell下死活不能使用backspace和delete删除误输的指令,只得不停退出,重登,仔细输..又错了,再退出,再登,仔细输...又错了...又 ...
- 执行异步UI更新
异步更新UI的几种方法①.使用Control.Invoke方式来更新数据 foreach (DataGridViewRow dgvr in this.dgv_s ...
- 智能指针shared_ptr, auto_ptr, scoped_ptr, weak_ptr总结
看这里: http://blog.csdn.net/lollipop_jin/article/details/8499530 shared_ptr可以多线程同时读,但是涉及到写,需要加锁. share ...
- 国内搜索大哥iOS面试题
每一次面试之后都会对问到的面试题进行总结. 这篇总结的是我面试某大型搜索公司的iOS面试题.一面(15min)+二面(30min).并拿到实习offer.当然在今天这个特殊的节日,祝大家新年快乐.希望 ...
- javascript进阶课程--第二章--对象
javascript进阶课程--第二章--对象 学习要点 理解面向对象的概念 掌握对象的创建方法 掌握继承的概念和实现方法 基本概念 对象究竟是什么?什么叫面向对象编程? 对象是从我们现实生活中抽象出 ...
- GetListToJson
List<Models.ArticleModel> list = GetList(page); return Newtonsoft.Json.JsonConvert.Serializ ...
- 一文了解sun.misc.Unsafe
Java语言和JVM平台已经度过了20岁的生日.它最初起源于机顶盒.移动设备和Java-Card,同时也应用在了各种服务器系统中,Java已成为物联网(Internet of Things)的通用语言 ...