【链接】:CF

【题意】:n组样例,对于每组样例,给你三个数p q b,问你p/q在b进制下是不是一个有限小数,是的话输出Finite,否则输出Infinite。

【分析】:b的过程是对q约分,那么只要b包含q全部的因子即可。考虑1/q,一定是一个小于等于1的数,考虑将小数转化为b进制的过程,每次将小数乘以b然后取整数部分,直到这个小数变成了0,也就是说如果某个小数1/q在b进制下可以被有限表示。

因此。对于在b进制下的小数p/q,只要看看q的质因子是不是都是b的质因子就可以了,显然可以用gcd来搞。每次都用q去除gcd(q,b)。如果最后q能够变成1.那就说明q的质因子都b的质因子。(gcd本质上就是两个数相同质因子中取指数较小的那个,然后全都乘起来)

但不要每次都重新获取q,b的gcd。用上次的结果尝试继续除就好。

【代码】:

#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define inf 0x3f3f3f3f
#define pll pair<ll,ll>
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define rep1(i,a,b) for(int i=a;i>=b;i--)
#define rson rt<<1|1,m+1,r
#define lson rt<<1,l,m
using namespace std; int main()
{
int t;
scanf("%d",&t);
while(t--)
{
ll p,q,b;
scanf("%lld%lld%lld",&p,&q,&b);
ll g=__gcd(p,q);
p/=g;
q/=g;
if(p==0||q==1){
printf("Finite\n");
continue;
}
while(q!=1&&b!=1)
{
b=__gcd(q,b);
q/=b;
}
if(q==1) printf("Finite\n");
else printf("Infinite\n");
}
}
/*
2
6 12 10
4 3 10 4
1 1 2
9 36 2
4 12 3
3 5 4
*/

最新文章

  1. Unable to create the selected property page. An error occurred while automatically activating bundle net.sourceforge.pmd
  2. C++复数类对除法运算符 / 的重载
  3. Mac上远程桌面连接Windows Server 2012 R2
  4. yarn的调度策略
  5. 使用Nlog记录日志到数据库
  6. POJ 1146 ID Codes (UVA146)
  7. mongodb权威指南读书笔记
  8. C# - 数据库存取图片
  9. C#5.0支持的await格式
  10. Thread in Java
  11. JAVA DESIGN PATTERN
  12. 20164310Exp1 PC平台逆向破解和BOF基础
  13. 原生JS实现jquery的ready
  14. Confluence 6 指定日志选项和已知问题
  15. django的简单原理
  16. Angular之特性模块 ( Feature Module )
  17. Lingo 做线性规划 - Marketing Applications
  18. django中的F和Q
  19. 【android】通过leakCanary找出程序内存泄露点
  20. JavaScript dotAll模式

热门文章

  1. 【bzoj1257】[CQOI2007]余数之和sum 数论
  2. P3509 [POI2010]ZAB-Frog
  3. P2874 [USACO07FEB]新牛棚Building A New Barn
  4. LeetCode--Reverse Linked List(Java)
  5. [洛谷P4015]运输问题
  6. 【BZOJ 3376】[Usaco2004 Open]Cube Stacking 方块游戏 带权并查集
  7. 洛谷P1346 电车
  8. Educational Codeforces Round 54 (Rated for Div. 2) ABCD
  9. linux 服务器下入侵之后的日志清理
  10. spring aop与aspectj