hdu 5505 GT and numbers(分解质因子)
2015-10-22 19:23
351 查看
题目链接:hdu 5505 GT and numbers
解题思路
将N,M分解质因,然后对单一因子进行考虑,2x∗n>m,注意如果N不是M的因子时是-1.代码
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef unsigned long long ll; const int maxn = 1000005; int N; ll M; int P, pri[maxn + 5], vis[maxn + 5]; int n, fac[maxn + 5], cnt[maxn + 5]; void init () { P = 0; memset(vis, 0, sizeof(vis)); for (int i = 2; i <= maxn; i++) { if (vis[i]) continue; pri[P++] = i; for (int j = i + i; j <= maxn; j += i) vis[j] = 1; } } void solve (int k) { n = 0; for (int i = 0; i < P; i++) { if (k % pri[i] == 0) { fac = pri[i]; cnt = 0; while (k % pri[i] == 0) { cnt ++; k /= pri[i]; } n++; } } } int get(int n, int x) { int ret = 0; while (x < n) { x = x + x; ret++; } return ret; } int main () { init(); int cas; scanf("%d", &cas); while (cas--) { scanf("%d%llu", &N, &M); solve(N); int ans = 0; bool flag = true; for (int i = 0; i < n; i++) { int c = 0; while (M % fac[i] == 0) { c++; M /= fac[i]; } if (c < cnt[i]) flag = false; ans = max(ans, get(c, cnt[i])); } printf("%d\n", M == 1 && flag ? ans : -1); } return 0; }
相关文章推荐
- Android CollapsingToolbarLayout:将ActionBar载入Toolbar(2)
- iOS上传错误 ERROR ITMS-90049
- SSL延迟有多大?
- 使用PHP获取网站Favicon的方法
- 分析j9 GC内存
- 加密javascript代码
- burp suite
- InputStream.skip方法的思考
- 思维导图-学习
- 2015南阳CCPC E - Ba Gua Zhen 高斯消元 xor最大
- 编程范式学习代码--cmpfun
- 代码编译方式 ant +ivy
- map集合类迭代方法
- 图像处理及机器学习开源
- hdu 5504 GT and sequence(dp)
- 如何两个栈实现队列?两个队列实现栈?
- ubuntu搭建Gerrit代码审核服务器
- 修改NodeManager的内存
- hadoop 安装配置学习
- Git使用以及在Github上托管自己的开源项目