hdu 5505
来源:互联网 发布:angular ui router.js 编辑:程序博客网 时间:2024/05/16 15:01
题目意思:给定两个数字n和m,每次n都可以乘上一个自己的因子,求最少乘几次能得到m。
分析:
如果A大于B那么显然无解。
考虑把A和B分解质因数。
若B存在A没有的质因数也显然无解。
对于某一个A的质因数的次数。为了加速接近B,它一定是每次翻倍,最后一次的时候把剩下的加上。
那么答案就是最小的k使得2k∗Anum≥Bnum。
最后把每个质因数的答案max起来即可。(B可以是2^63,这样就得用unsigned long long了,这是个坑点)
PS:之前理解错了题目意思,以为每次乘上的都是给定的那个数字n的因子,其实不是,乘以的是每次乘以因子之后得到的数字的因子。#include <bits/stdc++.h>using namespace std ;int gcd(unsigned long long a , unsigned long long b){ if(a%b) return gcd(b, a%b); return b;}int main(){ int t ; unsigned long long m , n ; scanf("%d",&t) ; while(t--) { cin>>n>>m; int ans = 0 ; while(n!=m) { if(m%n){ printf("-1\n") ; break ; } unsigned long long k = gcd(m/n,n) ; if(k==1){ printf("-1\n") ; break ; } n*=k ;//之前一直在这里写成m/=k了,wrong了无数次 ans++ ; } if(n==m)printf("%d\n",ans); } return 0 ;}
0 0
- HDU 5505
- hdu 5505
- hdu 5505
- hdu 5504 5505
- hdu-5505 数论
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- Material Design Support Library中NavigationView添加下划线
- Altium Designer 教程
- 迁移学习 transfer learning
- __weak和__block的区别
- 刚才读《基于Lucene的中文自然语言搜索引擎》后感
- hdu 5505
- lua文件读写
- 一个大四求职的菜鸟的web前端学习之路(二)
- 代码重构---代码大全学习系列--未完成
- Leetcode -- Divide Two Integers
- lca问题的完美解决和升级!!!——预处理+二分深搜
- hadoop学习笔记之<hadoop fs命令详解>
- CODEVS1576最长严格上升子序列
- ios教程(java编程思想等级)