zoukankan      html  css  js  c++  java
  • poj 1730 Perfect Pth Powers

    这个有2种方法。

    一种是通过枚举p的值(p的范围是从1-32),这样不会超时,再就是注意下精度用1e-8就可以了,还有要注意负数的处理……

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<iomanip>
     6 #include<string>
     7 using namespace std;
     8 int fun(double n)
     9 {
    10     int p=32,f=1;
    11     if(n<0)
    12     {
    13         p=31;
    14         f=2;
    15         n=-n;
    16     }
    17     for(;p>=1;p-=f)
    18     {
    19         double a=pow(n,1.0/p);
    20         long t1=a;
    21         long t2=a+1;
    22         if(a-t1<=1e-12||t2-a<=1e-12)
    23             break;
    24     }
    25     return p;
    26 }
    27 int main()
    28 {
    29     int x,p;
    30     while(cin>>x&&x)
    31     {
    32         p=fun(x);
    33         cout<<p<<endl;
    34     }
    35     return 0;
    36 }

     第二种方法就是分解素数因子,求出因子的指数的最大公约数就是答案了,但是我这测试没错,提交超时……

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<algorithm>
     4 #include<vector>
     5 #include<cmath>
     6 #include<iomanip>
     7 #include<string>
     8 using namespace std;
     9 int prime[100001],a[100001];
    10 void init()
    11 {
    12     int i,j,k=0;
    13     for(i=2;i<=100000;i++)
    14     {
    15         if(!a[i])
    16         {
    17             prime[k++]=i;
    18             for(j=i+i;j<=100000;j+=i)
    19                 a[j]=1;
    20         }
    21     }
    22 }
    23 int gcd(int a,int b)
    24 {
    25     int c;
    26     if(a<b) swap(a,b);
    27     while(b)
    28     {
    29         c=a;
    30         a=b;
    31         b=c%b;
    32     }
    33     return a;
    34 }
    35 int main()
    36 {
    37     int n,i,j;
    38     bool flag;
    39     init();
    40     while(scanf("%d",&n),n)
    41     {
    42         flag=0;
    43         if(n<0)
    44         {
    45             flag=1;
    46             n=-n;
    47         }
    48         vector<int> key;
    49         for(i=0;prime[i]*prime[i]<=n;i++)
    50         {
    51             if(n%prime[i]==0)
    52             {
    53                 int c=0;
    54                 for(;n%prime[i]==0;n/=prime[i],c++);
    55                 key.push_back(c);
    56             }
    57         }
    58         if(n>1) key.push_back(1);
    59         int sum=key[0];
    60         for(i=1;i<key.size();i++)
    61             sum=gcd(sum,key[i]);
    62         if(flag)
    63         {
    64             while(sum%2==0)
    65                 sum/=2;
    66         }
    67         printf("%d
    ",sum);
    68     }
    69     return 0;
    70 }
  • 相关阅读:
    快速开始Python/WSGI应用程序
    git clone 指定的单个目录或文件夹
    django-1-应用开发基本套路
    raid管理
    Linux下利用script命令录制并回放终端会话
    Mysqldump参数大全
    在crontab中执行脚本重要事项
    IDEA 不能搜索插件解决方案之一
    将页面整体显示为灰色的 CSS
    Linux CentOS7.5静默安装Oracle11gR2
  • 原文地址:https://www.cnblogs.com/xin-hua/p/3189810.html
Copyright © 2011-2022 走看看