UVA
来源:互联网 发布:银行软件开发必备知识 编辑:程序博客网 时间:2024/05/21 17:34
题目大意 : 输入两个整数A,C,求最小的整数B使得lcm(A,B)=C,无解输出“NO SOLUTION”
思路:A若不是C的因子,那么肯定不存在B。
若A是C的因子,那么就递归使问题缩小。
每次先求出C/A,比如当A=6,C=24时,C/A=4,此时判断4和6是否互质,若互质则两者的lcm为C,显然4,6不互质,那么就求出4,6的gcd=2,此时4/2=2与6/2=3 2,3是互质的
于是递归,答案即为2(gcd)*(3,24/gcd=12)的问题,新问题中A=3,C=12,求出C/A=4,因为3,4,互质,所以返回4这个解,再乘以之前一次递归的2,所以答案为8
代码
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#define ll long longusing namespace std;long long gcd(long long a,long long b){ return (a==0)?b:gcd(b%a,a);}long long lcm(long long A,long long C){ if(A==1)return C; int tempb=C/A; int tempgcd=gcd(tempb,A); tempb/=tempgcd; if(tempb*A==C)return tempb; return tempgcd*lcm(A/tempgcd,C/tempgcd);}int main(){ int T; long long A,C,ans; scanf("%d",&T); while(T--) { bool label=true; scanf("%lld%lld",&A,&C); if(C%A) { printf("NO SOLUTION\n"); continue; } ans=lcm(A,C); printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- 中文乱码问题解决方案
- 支付宝支付总结
- linux实验--添加硬盘
- 定时脚本任务列子(crontab)
- SSH和SSM
- UVA
- Drools安装傻瓜教程(含Java和Eclipse的安装)
- ASimpleCache 是一个为android制定的 轻量级的 开源缓存框架
- 没有core dump文件如何定位问题
- 14. Longest Common Prefix
- LetNet5卷积参数理解
- C++中结构体与类的区别
- 史上最简单!冒泡、选择排序的Python实现及算法优化详解
- 手慢无 | 年薪30万也离职学的Linux运维课?到底教什么?