hdu4320 Arcane Numbers 1(小数进制转换)

来源:互联网 发布:windows的资源管理器 编辑:程序博客网 时间:2024/06/04 19:47

这题首先得明白一个十进制小数如何变成A进制小数的。比如下面的二进制。

点击打开链接


这样的话我们就可以先把A进制下的小数变成十进制下的小数,然后看能否变成B进制下的小数。

给出A,B表示两种进制,一个A进制下的有限小数能否转换成B进制下的有限小数。

A进制下的小数可以表示成 

1/(A^1)+1/(A^2)  + 1/(A^3) + ……,

转换成B进制就是不断的成B知道为0,(1/(A^1)+1/(A^2)  + 1/(A^3) + ……)*,进一步化简就是必须整除,就可以变成A中的质因数必须出现在B中。

A <=10^12,质因数打表只需要sqrt(A)就行了。然后就是范围内的枚举。                      

 

/*****************************************Author      :Crazy_AC(JamesQi)Time        :2016File Name   :*****************************************/// #pragma comment(linker, "/STACK:1024000000,1024000000")#include <iostream>#include <algorithm>#include <iomanip>#include <sstream>#include <string>#include <stack>#include <queue>#include <deque>#include <vector>#include <map>#include <set>#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <climits>using namespace std;#define MEM(x,y) memset(x, y,sizeof x)#define pk push_back#define lson rt << 1#define rson rt << 1 | 1typedef long long LL;typedef unsigned long long ULL;typedef pair<int,int> ii;typedef pair<ii,int> iii;const double eps = 1e-10;const int inf = 1 << 30;const int INF = 0x3f3f3f3f;const int MOD = 1e9 + 7;const int N = 1e6 + 10;int A[N];int mark[N];int top;void prim() {    for (int i = 2;i < N;++i) {        if (!mark[i]) {            mark[i] = 1;            A[top++] = i;            for (int j = i*2;j < N;j += i)                mark[j] = 1;        }    }}int main(){        // freopen("in.txt","r",stdin);    // freopen("out.txt","w",stdout);    int t;    scanf("%d",&t);    int nCase = 0;    prim();    while(t--) {        LL a,b;        scanf("%lld%lld",&a,&b);        bool flag = true;        for (int i = 0;i < top && 1LL*A[i]*A[i] <= a;++i) {            if (a % A[i] == 0) {                while(a % A[i] == 0) a /= A[i];                if (b % A[i] != 0) {                    flag = false;                    break;                }            }         }        printf("Case #%d: ", ++nCase);        if (b % a != 0) flag = false;        if (flag) puts("YES");        else puts("NO");    }    return 0;}


0 0
原创粉丝点击