zoukankan      html  css  js  c++  java
  • CF 984C Finite or not? (数论)

    CF 984C Finite or not? (数论)

    给定T(T<=1e5)组数据,每组数据给出十进制表示下的整数p,q,b,求问p/q在b进制意义下是否是有限小数。

    首先我们先把p/q约分一下。类比一下b=10的情况,我们发现约分后,只有当q的因数仅有2的倍数和5的倍数时,p/q才是有限小数。于是这启发我们猜结论:仅当q的质因数集合包含在b的质因数集合内时,p/q在b进制下才是有限小数。

    那么现在问题就被转换为了:已知两数q,b,问q的质因数集合是否完全包含在b的中。

    (b=p_1^{k_1}p_2^{k_2}...p_n^{k_n}*C)(q=p_1^{c_1}p_2^{c_2}...p_n^{c_n}*D),且({p_i, ile n})是q与b个数最多的共同质因数集合。那么我们要想办法把q中的(p_i)给去掉,使q只剩下D。由于(k_i>0)(c_i>0),那么设(b'=(b, q)),那么不停将(b')(q)得到(q'),最后剩下的数就是D。现在只需判断D是否为1即可。

    #include <cstdio>
    using namespace std;
    
    typedef long long LL;
    LL T, p, q, b;
    
    LL gcd(LL x, LL y){ return y?gcd(y, x%y):x; }
    
    int main(){
        scanf("%lld", &T); LL t;
        while (T--){
            scanf("%lld%lld%lld", &p, &q, &b);
            t=gcd(p, q); p/=t; q/=t;
            //现在问题转化为求q的质因数集合是否被包含在b的内
            b=gcd(q, b); LL lq=0;
            while (q!=lq){
                lq=q;
                q/=gcd(q, b);
            }
            if (q==1) puts("Finite"); else puts("Infinite");
        }
        return 0;
    }
    
  • 相关阅读:
    hive之external table创建
    hive之managed table创建
    Ubuntu下hadoop1.0.4安装过程
    hadoop相关Exception
    ASP.NET 数据访问类 SQLSERVER
    ASP.NET中Cookie编程的基础知识
    SourceForge上的好东西(.Net)
    ASP.NET生成高质量缩略图通用函数(c#代码)
    Sql Server实用操作小技巧集合
    分页SQL Server存储过程
  • 原文地址:https://www.cnblogs.com/MyNameIsPc/p/9048023.html
Copyright © 2011-2022 走看看