HDU 5505 - BestCoder Round #60 - GT and numbers
题目链接 : http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=641&pid=1002
思路 :
N有若干个质因子, N = a^b * c^d * e^f......
M也有若干个质因子, M = a^(b+k) * c(d+k1) * e^(f+k2)......
N能到达M的条件是它们的质因子必须完全相同
N每次可以乘上它的若干个质因子, 直到这个质因子的幂次等于M这个质因子的幂次
考虑这样一个事实, N乘上某个质因子的a次幂后, 新的N可以乘上该质因子的2a次幂
故对于每个质因子, N的次数每次平方, cnt++, 直到大于等于M这个质因子的次数, 取最大的cnt即可
要注意的是M的范围会爆long long 所以要开unsigned long long
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; typedef unsigned long long LL; const int MAXN = 1e6+;
const int PRI_NUM = 2e6+; bool vis[PRI_NUM];
int prime[MAXN];
int factor_n[MAXN];
int factor_m[MAXN];
int prime_n[];
int prime_m[]; void Pre()
{
for(int i = ; i <= PRI_NUM; i++) {
if(vis[i] == ) {
for(int j = i+i; j <= PRI_NUM; j+=i) {
vis[j] = ;
}
}
}
int cnt = ;
for(int i = ; i <= PRI_NUM; i++) {
if(vis[i] == ) {
prime[cnt++] = i;
}
}
} void Init()
{
memset(prime_n, , sizeof(prime_n));
memset(prime_m, , sizeof(prime_m));
} int main()
{
Pre(); int t;
int n;
LL m; scanf("%d", &t);
while(t--) {
Init();
scanf("%d %I64u", &n, &m);
if(m == n) {
printf("0\n");
continue;
}
if(m % n || n <= ) {
printf("-1\n");
continue;
}
int cnt = ;
for(int i = ; i < MAXN; i++) {
if(n == ) break;
if(n % prime[i] == ) {
factor_n[cnt] = prime[i];
while(n % prime[i] == ) {
n /= prime[i];
prime_n[cnt]++;
}
cnt++;
}
}
if(n > ) {
factor_n[cnt] = n;
prime_n[cnt] = ;
cnt++;
}
for(int i = ; i < cnt; i++) {
while(m % factor_n[i] == ) {
m /= factor_n[i];
prime_m[i]++;
}
}
if(m > ) {
printf("-1\n");
continue;
}
int ans = ;
for(int i = ; i < cnt; i++) {
int k = ;
while(prime_n[i] < prime_m[i]) {
prime_n[i] <<= ;
k++;
}
if(k > ans) ans = k;
}
printf("%d\n", ans);
} return ;
}
另外看到一种很强的做法
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; typedef unsigned long long ULL; ULL Gcd(ULL a, ULL b)
{
ULL r;
while(a % b) {
r = a % b;
a = b;
b = r;
}
return b;
} int main()
{
int t;
ULL n, m; scanf("%d", &t);
while(t--) {
scanf("%I64u %I64u", &n, &m);
int ans = ;
bool flag = ;
while(n != m) {
if(m % n) {
flag = ;
break;
}
ULL temp = Gcd(m / n, n);
if(temp == ) {
flag = ;
break;
}
n *= temp;
ans++;
}
if(flag == ) {
printf("%d\n", ans);
}
else printf("-1\n");
} return ;
}
HDU 5505 - BestCoder Round #60 - GT and numbers的更多相关文章
- HDU 5506 - BestCoder Round #60 - GT and set
题目链接 : http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=641&pid=1003 题意 : 给N集 ...
- hdu 5667 BestCoder Round #80 矩阵快速幂
Sequence Accepts: 59 Submissions: 650 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
- hdu 5643 BestCoder Round #75
King's Game Accepts: 249 Submissions: 671 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 6 ...
- hdu 5641 BestCoder Round #75
King's Phone Accepts: 310 Submissions: 2980 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- BestCoder Round #60/HDU 5505 暴力数学
GT and numbers 问题描述 给出两个数NN和MM. NN每次可以乘上一个自己的因数变成新的NN. 求最初的NN到MM至少需要几步. 如果永远也到不了输出-1−1. 输入描述 第一行读入一个 ...
- HDU 5682/BestCoder Round #83 1003 zxa and leaf 二分+树
zxa and leaf Problem Description zxa have an unrooted tree with n nodes, including (n−1) undirected ...
- HDU 5496 - BestCoder Round #58 - Beauty of Sequence
题目链接 : http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=637&pid=1002 思路 : 考 ...
- BestCoder Round #60 题解链接
题解 题目 1001 GT and sequence 注意先特判000的情况:如果读入的数据有000,那么去掉所有的000且最后答案和000取一个max. 剩下的正数显然全部乘起来比较优. 对于负数 ...
- BestCoder Round #60 1002
Problem Description You are given two numbers NNN and MMM. Every step you can get a new NNN in the w ...
随机推荐
- Xcode7 国际化
1.第一步 HaiTing_xcodeproj.png 2.第二不 HaiTing_xcodeproj 2.png 3.第三步 Localizable_strings.png 5第五步 ZLBMeVi ...
- 《C专家编程》第一天
1.2 C语言的早期体验 1)C语言的基本数据类型直接与底层硬件相对应.C语言不存在内置的复数类型.C语言一开始不支持浮点类型,直到硬件系统能够直接支持浮点数之后才增加了对它的支持. 2)auto关键 ...
- Java多线程——多线程的基本概念和使用
一.进程和线程的基础知识 1.进程和线程的概念 进程:运行中的应用程序称为进程,拥有系统资源(cpu.内存) 线程:进程中的一段代码,一个进程中可以有多段代码.本身不拥有资源(共享所在进程的资源) 在 ...
- canvas 下载
function saveFile(data, filename){ var save_link = document.createElementNS('http://www.w3.org/1999/ ...
- JQuery 代码
http://baike.baidu.com/view/136475.htmhttp://www.cnblogs.com/gleamy_ming/archive/2009/04/29/1446492. ...
- UIWebView禁止点击后跳转
#pragma mark 禁止webview中的链接点击 - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRe ...
- PHP MySQLi
PHP MySQLi 简介 PHP MySQLi = PHP MySQL Improved! MySQLi 函数允许您访问 MySQL 数据库服务器. 注释:MySQLi 扩展被设计用于 MySQL ...
- angularjs中的绑定策略“@”,“=”,“&”实例
<!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <me ...
- web项目环境搭建(1):建立一个maven项目
一.maven简介以及常用概念 1.Maven是一个项目管理和整合的工具.Maven为开发者提供了一套完整的构建生命周期框架.开发团队基本不用花多少时间就能自动完成工程的基础构建配置,因为Maven使 ...
- [欢度国庆]为什么我们今天还要学习和使用C++?(转载)
在各种新的开发语言层出不穷的今天,在Java和C#大行其道今天,我们为什么还要学习和使用C++?现在学习C++将来有用吗?学习C++要花费那么多时间和精力,这一切都值得吗?现在学习C++有钱途吗? 这 ...