hdu5505GT and numbers
2016-05-10 13:16
211 查看
http://acm.hdu.edu.cn/showproblem.php?pid=5505
题意 给出 n ,m n每次可以成一个数(是n 的因子)问最少多少次乘到m
数据范围m是2^63 而longlong是2^63-1 开成unsigned ll,但是longlong存的话会把2^63存成-2^63,求得时候也没关系,恰好正确。
如果m的素因子中有n的素因子中没有的 肯定不存在 用gcd(n,m/n)判断,n每次乘完肯定还是n的倍数 要想最少次数,应该希望每次乘n
题意 给出 n ,m n每次可以成一个数(是n 的因子)问最少多少次乘到m
数据范围m是2^63 而longlong是2^63-1 开成unsigned ll,但是longlong存的话会把2^63存成-2^63,求得时候也没关系,恰好正确。
如果m的素因子中有n的素因子中没有的 肯定不存在 用gcd(n,m/n)判断,n每次乘完肯定还是n的倍数 要想最少次数,应该希望每次乘n
#include <iostream> #include <cmath> #include <cstdio> using namespace std; typedef unsigned long long ull; ull gcd(ull a,ull b) { if(!b) return a; else return gcd(b,a%b); } int main() { int t; scanf("%d",&t); ull n,m,k; while(t--) { int ans=0; scanf("%lld%lld",&n,&m); while(n!=m) { if(m%n) { printf("-1\n"); break; } k=gcd(m/n,n); if(k==1) { printf("-1\n"); break; } n=n*k; ans++; } if(n==m) printf("%d\n",ans); } return 0; }
相关文章推荐
- android 中自定义软件盘用于特需界面的输入
- nyoj 722 Sudoku (暴力搜索)
- Asp.net mvc实时生成缩率图到硬盘
- Linux下网络故障诊断
- 直线检测透视变换
- Codeforces 635D Factory Repairs【树状数组】
- 程序输出结果是多少?
- Codeforces 635D Factory Repairs【树状数组】
- Codeforces 635D Factory Repairs【树状数组】
- 查远程数据库 sqlserver
- android-----LayoutInflater的inflate方法详解
- java SpringMVC Filter登录拦截器
- Linux上使用Qt Creator进行C/C++开发
- 局域网文件同步-计划任务
- Appium学习-关于Inspector
- System.arraycopy()实现数组之间的复制
- Smart210学习记录------paltform总线
- 【Arduino官方教程第一辑】示例程序 3-5 模拟信号的校准
- 【POJ1470】Closest Common Ancestors
- Google map api 初学