题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1220

题目大意:

  给你一个 x,请求出一个最大的 p 使得 np = x(n为任意整数)。注意,x 有可能是负数。

解题思路:

  算术基本定理。

  求出 |x| 的唯一分解式,然后求各项指数的最大公因数。如果 x<0,那么还要事先将分解式的每一项的指数都转化成奇数(负数的偶数次方就变成正数了嘛)。

AC代码:

 #include <iostream>
#include <cstdio>
#include <cmath> using namespace std;
typedef long long ll;
const int maxn = 1e5;
bool not_prime[maxn];
int prime[maxn];
int cnt;
void init(){
cnt=;
not_prime[]=not_prime[]=true;
for(ll i=;i<maxn;i++){
if(!not_prime[i]){
prime[cnt++]=i;
for(ll j=i*i;j<maxn;j+=i)
not_prime[j]=true;
}
}
}
int gcd(int a,int b){
if(b==) return a;
return gcd(b,a%b);
}
int ind[maxn];
int solve(ll x){
bool fu=false;
if(x<){
fu=true;
x=-x;
}
int tmp=;
for(int i=;i<cnt;i++){
if(x%prime[i]==){
ind[tmp]=; x/=prime[i];
while(x%prime[i]==){
ind[tmp]++;
x/=prime[i];
}
tmp++;
}
}
if(x>) ind[tmp++]=;
if(fu){
int ret=ind[];
while(ret%==) ret/=;
if(ret==) return ;
for(int i=;i<tmp;i++){
while(ind[i]%==) ind[i]/=;
ret=gcd(ret,ind[i]);
if(ret==) return ;
}
return ret;
}
else{
int ret=ind[];
if(ret==) return ;
for(int i=;i<tmp;i++){
ret=gcd(ret,ind[i]);
if(ret==)return ;
}
return ret;
}
}
int main(){
init();
ll x;
int T;
scanf("%d",&T);
for(int t=;t<=T;t++){
scanf("%lld",&x);
printf("Case %d: %d\n",t,solve(x));
}
return ;
}

最新文章

  1. 2015.4.25-2015.5.1 字符串去重,比例圆设计,中奖机和canvas橡皮擦效果等
  2. asp.net中如何防止用户重复点击提交按钮
  3. php基础复习(一)smarty模板
  4. Ubuntu Server 14.04 下root无法ssh登陆
  5. Codeforces 494D Upgrading Array
  6. OC学习那些事:点语法
  7. HDU 1828 POJ 1177 Picture
  8. 在当前图纸中创建一个表格, AcDbTable 类
  9. SpringBoot处理日期转换问题
  10. 平衡二叉树(Balanced Binary Tree&#160;或&#160;Height-Balanced Tree)又称AVL树
  11. K进制数
  12. 临时关闭Mysql ONLY_FULL_GROUP_BY
  13. MES模块
  14. 环回接口---loopback
  15. pip使用简要说明
  16. MVC与WebApi中的异常统一处理
  17. 详解Base64编码和解码
  18. WCF可靠性会话之服务分流
  19. Fiddler2 模拟文件上传
  20. RAC常用日志总结

热门文章

  1. Ubuntu+FastDFS+Nginx
  2. JAVA学习之路 (五) 类
  3. DFS--POJ 1190 生日蛋糕
  4. P3831 [SHOI2012]回家的路
  5. python操作ansible api示例
  6. 树莓派4B踩坑指南 - (15)搭建在线python IDE
  7. C++11之STL多线程
  8. OpenCV之Mat类使用总结
  9. vue项目-打印页面中指定区域的内容(亲测有效!)
  10. nginx脚本自动安装