• POJ 1730 Perfect Pth Powers (枚举||分解质因子)


    Perfect Pth Powers

    Time Limit: 1000MS   Memory Limit: 10000K
    Total Submissions: 16638   Accepted: 3771

    Description

    We say that x is a perfect square if, for some integer b, x = b2. Similarly, x is a perfect cube if, for some integer b, x = b3. More generally, x is a perfect pth power if, for some integer b, x = bp. Given an integer x you are to determine the largest p such that x is a perfect pth power.

    Input

    Each test case is given by a line of input containing x. The value of x will have magnitude at least 2 and be within the range of a (32-bit) int in C, C++, and Java. A line containing 0 follows the last test case.

    Output

    For each test case, output a line giving the largest integer p such that x is a perfect pth power.

    Sample Input

    17
    1073741824
    25
    0
    

    Sample Output

    1
    30
    2

    Source

     
     
    从31往前枚举(因为数据最大不会超过32-bit (int)),用pow将要求的数字求出来,再进行验证,这里要注意精度问题。
    这道题比较坑的是会有负数,对于负数的话,只能开奇数次方。
     1 #include<cmath>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<stdlib.h>
     5 #include<algorithm>
     6 #define LL __int64
     7 using namespace std;
     8 int main()
     9 {
    10     //freopen("in.txt","r",stdin);
    11     int n,x,y;
    12     while(scanf("%d",&n)&&n)
    13     {
    14         if(n>0)
    15         {
    16             for(int i=31;i>=1;i--)
    17             {
    18                 x=(int)(pow(n*1.0,1.0/i)+0.5);
    19                 y=(int)(pow(x*1.0,1.0*i)+0.5);
    20                 if(n==y)
    21                 {
    22                     printf("%d
    ",i);
    23                     break;
    24                 }
    25             }
    26         }
    27         else
    28         {
    29             n=-n;
    30             for(int i=31;i>=1;i-=2)
    31             {
    32                 x=(int)(pow(n*1.0,1.0/i)+0.5);
    33                 y=(int)(pow(x*1.0,1.0*i)+0.5);
    34                 if(n==y)
    35                 {
    36                     printf("%d
    ",i);
    37                     break;
    38                 }
    39             }
    40         }
    41     }
    42     return 0;
    43 }
    View Code

    还可以用分解质因子的方法来做

    所求的答案就是所给的数的所有质因子的指数的最大公约数

    大牛是这么做的

    http://www.cnblogs.com/Lyush/archive/2012/07/14/2591872.html

  • 相关阅读:
    愚蠢的程序员...
    云计算优于终端计算和集中计算?
    REST资源合集
    龙芯软件开发:使用龙芯2e的模拟器GXemul
    The Origins of Complex Numbers
    net 3.5 Ms Chart 使用心得
    XPO 第三方控件学习(DevExpress Persistent Object )系列表间关系
    show your data
    缩略数据
    单片机试题
  • 原文地址:https://www.cnblogs.com/clliff/p/3924191.html
Copyright © 2020-2023  润新知