HDU 4320 Arcane Numbers 1 (质因子分解)
题目:传送门。
题意:将一个A进制下的有限小数转化为B进制看是否仍为有限小数。
题解:一个A进制的小数可以下次 左移动n位变成A进制整数然后再将其转化为B进制即可 即B^m/A^n要整除,因此A的质因子B必须得全部含有。
#include <iostream> #include <math.h> #include <string.h> #include <algorithm> #include <stdio.h> #include <stdlib.h> const int maxn=1000100; bool isprime[maxn]; int prime[maxn]; using namespace std; int i,j,k=0; void pr() { for(i=2;i<=maxn;i++) { if(!isprime[i]) { for(j=i+i;j<=maxn;j=j+i) isprime[j]=true; prime[k++]=i; } } } int main() { pr(); int t,c=1; bool flag=true; long long a,b; scanf("%d",&t); while(t--) { scanf("%lld%lld",&a,&b); flag=true; for(i=0;i<k&&prime[i]<=a;i++) { if(a%prime[i]==0) { if(b%prime[i]!=0) { flag=false; break; } } while(a%prime[i]==0) a/=prime[i]; } if(b%a!=0) flag=false; if(flag) cout<<"Case #"<<c++<<": YES"<<endl; else cout<<"Case #"<<c++<<": NO"<<endl; } return 0; }