zoukankan      html  css  js  c++  java
  • codeforces 983A Finite or not?

    题意:

    判断一个分数在某一进制下是否为无限小数。

    思路:

    首先把这个分数约分,然后便是判断。

    首先,一个分数是否为无限小数,与分子是无关的,只与分母有关。

    然后,再来看看10进制的分数,可化为有限小数的特点,10为分母可以,2为分母可以,16为分母可以,40为分母可以。。。。

    总之,其实全部都与2和5有关,2和5又是10的质因数,所以可以猜想到,如果分母可以分解为进制的质因子的乘积,那么就可以化为有限小数。

    所以,就判断q的质因子是否为b的子集。

    每次求出q与b的最大公约数g,那么g必须可以全部包含q的质因子,所以q /= g,b = g,然后一直这样做,直到g为1,最后再判断q能否整除b。

    代码:

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <algorithm>
     4 using namespace std;
     5 typedef long long ll;
     6 ll gcd(ll a,ll b)
     7 {
     8     if (b == 0) return a;
     9     else return gcd(b,a%b);
    10 }
    11 int main()
    12 {
    13     int n;
    14     scanf("%d",&n);
    15     ll p,q,b;
    16     while (n--)
    17     {
    18         scanf("%lld%lld%lld",&p,&q,&b);
    19         ll t = gcd(p,q);
    20         p /= t;
    21         q /= t;
    22         if (p == 0) puts("Finite");
    23         else
    24         {
    25             while (b % q)
    26             {
    27                 ll g = gcd(b,q);
    28                 if (g == 1) break;
    29                 b = g;
    30                 q /= g; 
    31             }
    32             if (b % q == 0) puts("Finite");
    33             else puts("Infinite");
    34         }
    35     }
    36     return 0;
    37 }
  • 相关阅读:
    微信公众号--JS-SDK
    微信公众号--网页授权
    微信公众号--资源请求
    微信公众号--相关资料
    微信公众号--消息回复
    一.小程序 --申请
    2017年总结
    SSM框架中常用的配置文件
    UML的9种图例解析
    23种设计模式汇总整理
  • 原文地址:https://www.cnblogs.com/kickit/p/9046503.html
Copyright © 2011-2022 走看看