数论(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高效计算
收获:数论题做不来可以找找规律,想想会用什么知识求解
代码:
题意:有一个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; }
相关文章推荐
- UIlable让字体自适应宽度方法
- Catalan数
- windows中相对路径和绝对路径
- 求下排每个数都是先前上排那十个数在下排出现的次数
- 进职场记(二)-培训
- 编写函数实现n^k,使用递归实现
- Android通过build.gradle配置应用版本等信息
- UI - UIImageView 和页面跳转
- (3)PHP生命周期和Zend引擎
- [ERROR:] [插入失败] code is 9998;desc is 得到唯一对象不唯一exception is null
- 常量指针与指针常量
- CSU 1333: Funny Car Racing(SPFA)13年省赛题
- 操作系统:内存管理
- 让自己习惯C++
- HDU 4005 The war
- 读取Properties配置文件
- base64原理
- 2015 Multi-University Training Contest 2
- 自定义adapter 及其性能优化
- 如何更好地管理你的数据库——navicat