link:http://www.bnuoj.com/bnuoj/problem_show.php?pid=26106

题意大概是一个A进制的有限小数转化为B进制之后是否还为有限小数?

对这题一开始都不知道怎么下手。。。因为不太懂小数之间的转换是怎样的

百度了一下小数的进制转换才得到一些启发、、还有对这个推规律什么的,最好

写下来看,这样比较明显。。。

下面是我想的过程,首先将A进制转变成10进制的话,有:a1/A+a2/A^2+a3/A^3…一直到

最后、、要将一个10进制小数转变成B进制的话,不断对其乘以B并取整数部分。。

既然要求最好得到的小数是否为有限小数,即不断的乘以B,看看能不能把最后的那个整除。

如果A中的所有不同因子的乘积C能整除B,则说明最后是有限小数,反之不是、、

那题目就转化成了分解A的质因子数得乘积,看看是否能整除B。。。

好啦。。下面上代码。。

code:

  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.     __int64 a,b,ans,i,t,cas;
  6.     scanf(“%I64d”,&t);
  7.     for(cas=1;cas<=t;cas++)
  8.     {
  9.         printf(“Case #%d: “,cas);
  10.         ans=1;
  11.         scanf(“%I64d%I64d”,&a,&b);
  12.         for(i=2;i*i<=a;i++)
  13.         {
  14.             if(a%i==0)
  15.             {
  16.                 ans*=i;
  17.                 while(a%i==0)
  18.                     a/=i;
  19.             }
  20.         }
  21.         ans*=a;
  22.         if(b%ans==0)
  23.             printf(“YES\n”);
  24.         else
  25.             printf(“NO\n”);
  26.     }
  27.     return 0;
  28. }

发表评论

电子邮件地址不会被公开。

Post Navigation