UVA11889(给出lcm(A,B)=C中的AC求最小的B)
题意:
给出最小公倍数LCM(A,B) = C中的A,C求最小的B.
思路:
lcm=(a*b)/gcd,把等号两侧同时除以a得到lcm/a=b/gcd左侧是已知的,右侧的gcd是a的因子中的一个,直接枚举a的所有因子找到答案就行了。
#include<math.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
long long gcd(long long a ,long long b)
{
return a % b == 0 ? b : gcd(b ,a % b);
}
long long yz[10000] ,yzs;
int main ()
{
long long a ,b ,c,cc ,i;
int t;
scanf("%d" ,&t);
while(t--)
{
scanf("%lld %lld" ,&a ,&c);
if(c % a)
{
printf("NO SOLUTION\n");
continue;
}
cc = c;
c = c / a;
long long n = (long long)sqrt(a);
yzs = 0;
for(i = 1 ;i <= n ;i ++)
if(a % i == 0) yz[++yzs] = i ,yz[++yzs] = a / i;
sort(yz + 1 ,yz + yzs + 1);
long long Ans = -1;
for(i = 1 ;i <= yzs ;i ++)
{
long long now = yz[i];
b = c * now;
if(a * b / gcd(a ,b) == cc)
{
Ans = b;
break;
}
}
if(Ans == -1) printf("NO SOLUTION\n");
else printf("%lld\n" ,Ans);
}
return 0;
}
UVA11889(给出lcm(A,B)=C中的AC求最小的B)相关推荐
- 给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数
给定一个最多包含40亿个随机排列的32位整数的顺序文件,找出一个不在文件中的32位整数. 1.在文件中至少存在这样一个数? 2.如果有足够的内存,如何处理? ...
- 编写一个方法,数出从0到n中数字2出现了几次?
2019独角兽企业重金招聘Python工程师标准>>> 编写一个方法,数出从0到n中数字2出现了几次? 例如:如果n为20,那么0,1,2,3,4,5,6,7,8,9,10,11,1 ...
- 打印出所有的 info.plist 中的 keys、values
打印出所有的 info.plist 中的 keys.values // get all keys and values in info.plist NSBundle* mainBundle = [NS ...
- python判断一个或者多个字符串,是否出现在一段话中
python判断一个或者多个字符串,是否出现在一段话中 要判断一段话中是否有几个字符串,只要一个出现就为True,刚开始想用map函数,后来发现也挺麻烦. 查了一些资料,发现用 any比较好 比如 p ...
- 对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的边。说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度
对下图所示的连通网络G,用克鲁斯卡尔(Kruskal)算法求G的最小生成树T,请写出在算法执行过程中,依次加入T的边集TE中的 边.说明该算法的基本思想及贪心策略,并简要分析算法的时间复杂度
- android中弹出窗口,如何在Android中创建弹出窗口(PopupWindow)
如何制作一个简单的Android弹出窗口 这是一个更完整的例子.这是一个补充性答案,涉及一般情况下创建弹出窗口的过程,而不一定是OP问题的具体细节.(OP要求取消按钮,但这不是必需的,因为用户可以在屏 ...
- 1. 定义方法,求出指定元素在数组中出现的次数.
package Day05;import java.util.ArrayList;/*** 3.* c* 1. 定义方法,求出指定元素在数组中出现的次数.* 2. 定义方法,统计数组中出现次数为1的元 ...
- 给定N个加号,M个减号以及N+M+1个整数,A1+A2+...+Am+An+1,小明想知道在所有由这n个加号,M个减号以及N+M+1个整数凑出的合法的后缀表达式中,结果最大的是哪一个?
问题;给定N个加号,M个减号以及N+M+1个整数,A1+A2+-+Am+An+1,小明想知道在所有由这n个加号,M个减号以及N+M+1个整数凑出的合法的后缀表达式中,结果最大的是哪一个? 请输出这个最 ...
- C语言:有N个数从小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个数。如果不在数组中,打印“not found”。
/*有N个数从小到大的顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个数.如果不在数组中,打印"not found".*/#include<stdio ...
最新文章
- angular2-baidu-map网站中使用百度地图
- Qt/QML 窗口阴影边框实现
- 爬虫实战:CentOS安装JDK,部署Java程序,利用screen使其保持在前台运行
- gcc编译器命令使用详解
- linux文件句柄满了 现象_Linux 离奇磁盘爆满,如何解决? | 原力计划
- php是单线程吗,php语言是单线程吗?
- PIL保存二维numpy数组(2,2)为灰度图和RGB图
- threejs 模型隐藏后不显示_教师资格证面试报名后显示“待审核”?不做这一步报名白费!...
- 100道MySQL数据库面试题解析
- 如何检查电脑是否已经安装Flash Player
- cc9.3 indesign_Adobe InDesign CC2019
- 电脑连接SONY蓝牙耳机没有声音
- sql解决数据库日志文件过大的问题
- c语言互不相同删除法,GitHub - MXHDOIT/C_Practice: 100道C语言经典习题
- 表格数据按行为单位查重
- JAVA基于局域网的聊天室系统(源代码+论文)
- 简单的登录注册连接数据库
- Android平台开发-Android keypad map-Android按键事件
- jupyter notebook修改字体
- Fibonacci 数列和 Lucas 数列的性质、推论及其证明