zoukankan      html  css  js  c++  java
  • [暑假集训--数论]poj1730 Perfect Pth Powers

    We say that x is a perfect square if, for some integer b, x = b 2. Similarly, x is a perfect cube if, for some integer b, x = b 3. More generally, x is a perfect pth power if, for some integer b, x = b p. Given an integer x you are to determine the largest p such that x is a perfect p th 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 p th power.

    Sample Input

    17
    1073741824
    25
    0
    

    Sample Output

    1
    30
    2

    给个n,把它表示成a^b的形式,问b最大是多少,n有负数

    正数简单,负数要打个标记,最后答案b要除到没有2的因子为止

    比如-1073741824=-(2^30)=(-4)^15,但是不能是(-2)^30

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 #define LL long long
     5 inline LL read()
     6 {
     7     LL x=0,f=1;char ch=getchar();
     8     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
     9     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    10     return x*f;
    11 }
    12 LL n;
    13 bool mk[100010];
    14 int p[100010],len;
    15 inline LL LLabs(LL a){return a<0?-a:a;}
    16 inline void getp()
    17 {
    18     for (int i=2;i<=100000;i++)
    19     {
    20         if (!mk[i])
    21         {
    22             p[++len]=i;
    23             for (int j=2*i;j<=100000;j+=i)mk[j]=1;
    24         }
    25     }
    26 }
    27 inline void work()
    28 {
    29     int flag=(n<0),ans=0;n=LLabs(n);
    30     for (int i=1;i<=len;i++)
    31     {
    32         if ((LL)p[i]*p[i]>n)break;
    33         if (n%p[i]!=0)continue;
    34         int now=0;while (n%p[i]==0)n/=p[i],now++;
    35         if (!ans)ans=now;else ans=__gcd(ans,now);
    36     }
    37     if (n!=1)ans=1;
    38     if (flag)while (ans%2==0)ans/=2;
    39     printf("%d
    ",ans);
    40 }
    41 int main()
    42 {
    43     getp();
    44     while (~scanf("%lld",&n)&&n)work();
    45 }
    poj 1730
  • 相关阅读:
    将ObservableCollection(Of T) 数据 绑定到 Canvas
    StylusNodeJS下构建更富表现力/动态/健壮的CSS
    string引用类型
    c#之预处理器指令
    c#继承与构造函数
    c#构造函数
    c#之扩展方法
    c#之结构
    继承与重写
    dedict: 很有新意的图形化英汉字典
  • 原文地址:https://www.cnblogs.com/zhber/p/7285353.html
Copyright © 2011-2022 走看看