zoukankan      html  css  js  c++  java
  • HDU 5505——GT and numbers——————【素数】

    GT and numbers

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 683    Accepted Submission(s): 190


    Problem Description
    You are given two numbers N and M.

    Every step you can get a new N in the way that multiply N by a factor of N.

    Work out how many steps can N be equal to M at least.

    If N can't be to M forever,print 1.
     
    Input
    In the first line there is a number T.T is the test number.

    In the next T lines there are two numbers N and M.

    T10001N1000000,1M263.

    Be careful to the range of M.

    You'd better print the enter in the last line when you hack others.

    You'd better not print space in the last of each line when you hack others.
     
    Output
    For each test case,output an answer.
     
    Sample Input
    3
    1 1
    1 2
    2 4
     
    Sample Output
    0
    -1
    1
     
    Source
     

    题目大意:

    解题思路:

    #include<stdio.h>
    #include<algorithm>
    #include<string.h>
    #include<iostream>
    #include<limits.h>
    using namespace std;
    typedef unsigned long long UINT;
    const int maxn = 1e6+2000;
    UINT prime[maxn];
    void getprime(){
        prime[0] = 1; prime[1] = 1;
        for(UINT i = 2; i*i <= maxn-10; i++){
            if(!prime[i])
            for(int j = i*i; j <= maxn-10 ;j += i){
                prime[j] = 1;
            }
        }
    }
    int main(){
        int T;
        getprime();
        scanf("%d",&T);
        UINT a,b;
        while(T--){
            scanf("%llu%llu",&a,&b);
            if(b < a){
                puts("-1");
            }else if(b == a){
                puts("0");
            }else{
                if(a == 1 || b%a != 0){
                    puts("-1");
                }else{
                    b /= a;
                    int sum = 0;
                    for(UINT i = 2; i <= maxn-100; i++){
                        if(prime[i]) continue;
                        UINT tmp = 1 , times = 0;
                        if(a % i != 0) continue;
                        while(a % i == 0){
                            a /= i;
                            tmp *= i;
                        }
                        while(b % tmp == 0){
                            b /= tmp;
                            tmp *= tmp;
                            times ++;
                        }
                        if(b % i == 0){
                            sum = times+1 > sum? times+1:sum;
                            while( b % i == 0){
                                b /= i;
                            }
                        }else{
                            sum = times > sum? times:sum;
                        }
                        if(b == 1){
                            break;
                        }
                    }
                    if(b == 1){
                        printf("%d
    ",sum);
                    }else{
                        puts("-1");
                    }
                }
            }
        }
        return 0;
    }
    

      

     
  • 相关阅读:
    chrome rpm旧版本下载地址
    windows 静态绑定arp
    ubuntu20开机自动打开浏览器全屏访问指定页面
    nginx+uwsgi+django+systemd部署django项目
    openresty编译安装
    windows服务器设置定时重启
    华为云和AWS之间打通内网
    python glob
    python subprocess
    python 异常
  • 原文地址:https://www.cnblogs.com/chengsheng/p/4892680.html
Copyright © 2011-2022 走看看