hdu 5505(GT and numbers)
2015-10-26 23:28
253 查看
题意:
给你a和b,a每次和它的因子相乘得到一个新的a,求多少次后可以得到b。
输入样例
输出样例
思路:
每次找出a和b/a的最大公约数(即当前a想得到b能乘的最大数),再进行判断。
第一次直接暴力搞,超时了,发现题意理解错了 T_T。
用unsign按着题意做即可。
给你a和b,a每次和它的因子相乘得到一个新的a,求多少次后可以得到b。
输入样例
3 1 1 1 2 2 4
输出样例
0 -1 1
思路:
每次找出a和b/a的最大公约数(即当前a想得到b能乘的最大数),再进行判断。
第一次直接暴力搞,超时了,发现题意理解错了 T_T。
用unsign按着题意做即可。
#include <iostream> #include <cstdio> #include <vector> #include <queue> #include <cstring> #include <functional> #include <algorithm> using namespace std; const int INF = 0x3f3f3f3f; typedef long long ll; typedef unsigned long long ull; ull gcd(ull a,ull b) { if(a%b) return gcd(b,a%b); return b; } int main() { int T; ull a,b; scanf("%d",&T); while(T--) { cin>>a>>b; if(a==1 && b==1) { printf("1\n"); continue; } if(a==1 && b!=1) { printf("-1\n"); continue; } ull ans = 0; while(b != a) { if(b % a) { printf("-1\n"); break; } ull k = gcd(b/a,a); //找能乘的最大因子 if(k == 1) { printf("-1\n"); break; } a*=k; ans++; } if(a == b) cout<<ans<<endl; } return 0; }
相关文章推荐
- 伪退役
- C++ 实现类似Notepad++ Ctrl+F 的搜索功能
- hdu 5505(GT and numbers)
- 伪退役
- 第三次成绩
- cyark - 数字方舟(看侣行第三季时发现的)
- 金融管理综合应用
- java实验五
- Centos安装gnome主菜单编辑器无
- JAVA 命令行运行java项目
- C++:文件的输入和输出
- Centos安装gnome主菜单编辑器无
- sublime去掉只含数字的行
- android中Http类的封装
- C++面试常见题目问与答(汇总一)
- POJ 1204 Word Puzzles // 字典树,枚举, 搜索
- Leetcode_257_Binary Tree Paths
- Java面试题全集(上)
- Leetcode_257_Binary Tree Paths
- 子序列