您的位置:首页 > 其它

数论(GCD) HDOJ 4320 Arcane Numbers 1

2015-08-25 21:08 267 查看
题目传送门

题意:有一个A进制的有限小数,问能否转换成B进制的有限小数

分析:0.123在A进制下表示成:1/A + 2/(A^2) + 3 / (A^3),转换成B进制就是不断的乘B直到为0,即(1/A + 2/(A^2) + 3 / (A^3)) * (B^m)。那么(B^m) 一定要能整除(A^n),转换一下就是A的质因子B都有,可以用GCD高效计算

收获:数论题做不来可以找找规律,想想会用什么知识求解

代码:

/************************************************
* Author        :Running_Time!
* Created Time  :2015-8-25 8:49:59
* File Name     :A.cpp
************************************************/

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std;

#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int MAXN = 1e5 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;

ll GCD(ll a, ll b)	{
return b == 0 ? a : GCD (b, a % b);
}

int main(){
int T, cas = 0;	scanf ("%d", &T);
ll A, B, C;
while (T--)	{
scanf ("%I64d%I64d", &A, &B);
while ((C = GCD (A, B)) != 1)   A /= C;
printf ("Case #%d: %s\n", ++cas, A == 1 ? "YES" : "NO");
}

return 0;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: