POJ 1730 Perfect Pth Power
来源:互联网 发布:淘宝代码有何用 编辑:程序博客网 时间:2024/06/07 01:13
题意:求出使y^p=x成立最大p值.
先对x进行素数分解,有X=(fac[1]^tn[1])*(fac[2]^tn[2])....(fac[n]^tn[n]) (fac为X的素数因子,tn为对应的次方数)
显然p=gcd(tn[1],tn[2],.....,tn[n]).
注意当n为负数时,p必须为奇数
#include <cstdio>#include <iostream>using namespace std;const int maxn=100000+10;bool isprime[maxn];int prime[maxn];void init(){ for(int i=1;i<maxn;i+=2) isprime[i]=1,isprime[i-1]=0; for(int i=3;i<maxn;i+=2) if(prime[i]){ for(int j=i*i;j<maxn;j+=i) isprime[j]=0; } isprime[1]=0,isprime[2]=1; int k=0; for(int i=2;i<maxn;i++) if(isprime[i]) prime[++k]=i; prime[0]=k;}int fac[10],tn[10];void divide(long long x){ int k=0; for(int i=1;i<prime[0]&&(long long)prime[i]*prime[i]<=x;i++) if(x%prime[i]==0){ fac[++k]=i; int s=0; while(x%prime[i]==0) x/=prime[i],s++; tn[k]=s; } if(x>1) fac[++k]=x,tn[1]=1; fac[0]=tn[0]=k;}int gcd(int x,int y){ return y==0?x:gcd(y,x%y);}int main(){ init(); long long n; while(cin>>n,n){ bool flag=0; if(n<0){ flag=1; n=-n; } divide(n); int ans=tn[1]; for(int i=2;i<=tn[0];i++) ans=gcd(ans,tn[i]); if(flag&&ans%2==0){ while(ans%2==0) ans/=2; } cout<<ans<<endl; } return 0;}
- POJ 1730 Perfect Pth Power
- poj 1730 筛素数+因式分解(Perfect Pth Power)
- POJ 1730 Perfect Pth Powers
- poj 1730 -- Perfect Pth Powers
- poj 1730 Perfect Pth Powers
- poj 1730 Perfect Pth Powers
- poj-1730 Perfect Pth Powers
- poj-1730 Perfect Pth Powers
- poj 1730 Perfect Pth Powers
- POJ-1730-Perfect Pth Powers
- POJ 1730 Perfect Pth Powers
- poj 1730 Perfect Pth Powers
- zoj 2124 || poj 1730 Perfect Pth Powers
- poj 1730 Perfect Pth Powers(枚举)
- Poj 1730 Perfect Pth Powers (数论 GCD)
- poj 1730 Perfect Pth Powers 精度修正
- POJ 1730 Perfect Pth Powers(数论)
- poj 1730 Perfect Pth Powers 筛法
- aspdotnet
- 窗口置前函数
- jdbc dml语句执行
- MyEclipse8.6安装svn(非link方式)
- js点滴
- POJ 1730 Perfect Pth Power
- 工厂模式-简单工厂模式-省略抽象产品类
- 爬虫工具Heritrix初体验
- LUA中测试鱼死亡动作、炸弹轨迹、炸弹爆炸动作
- 【便利贴】Struts默认标配
- sqlserver 用到临时表去除重复列
- Qt pro工程文件 介绍
- sysstat监控工具使用(包含pidstat,iostat,sar)
- 新九州--讲义音频下载方法