题目链接: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 ;
}

LightOJ1220的更多相关文章

  1. Lightoj-1220

    https://vjudge.net/problem/LightOJ-1220 求x=bp中最大的p,x可能为负数. 因数分解,x=p1x1*p2x2*...*pnxn x=(p1x1'*p2x2'* ...

  2. LightOJ1220 —— 质因数分解

    题目链接:https://vjudge.net/problem/LightOJ-1220 1220 - Mysterious Bacteria    PDF (English) Statistics ...

  3. LightOJ-1220 Mysterious Bacteria 唯一分解定理 带条件的最大公因数

    题目链接:https://cn.vjudge.net/problem/LightOJ-1220 题意 给x=y^p,问p最大多少 注意x可能负数 思路 唯一分解定理,求各素因数指数的GCD 注意负数的 ...

  4. 毒瘤阅读题 LightOJ - 1220

    Mysterious Bacteria LightOJ - 1220 https://vjudge.net/problem/LightOJ-1220 "Each case starts wi ...

  5. LightOJ - 1341 Aladdin and the Flying Carpet 唯一分解定理LightOJ 1220Mysterious Bacteria

    题意: ttt 组数据,第一个给定飞毯的面积为 sss,第二个是毯子的最短的边的长度大于等于这个数,毯子是矩形但不是正方形. 思路: 求出 sss 的所有因子,因为不可能是矩形,所以可以除以 222, ...

随机推荐

  1. Fabric的6大特性

    文章目录 什么是Hyperledger Fabric 1. 成员准入 2. 性能,可伸缩性和信任级别 3 需要了解的数据 4 通过不可变的分布式账本进行复杂查询 5 支持插件组件的模块化架构 6 保护 ...

  2. 【Linux常见命令】echo命令

    echo - display a line of text 打印输出内容的常用命令,可以结合重定向>和追加>>对文件进行覆盖或追加内容. 语法: echo [SHORT-OPTION ...

  3. OpenStack 删除instance 和其附加的volumes

    在openstack里面有时候删除instance时,volume无法跟着删除,可以自己编写脚本来实现, 脚本代码如下: #!/bin/bash for i in $(cat /root/host-d ...

  4. Swift-Realm数据库的使用详解

    Swift-Realm数据库的使用详解 概述 Realm 是一个跨平台的移动数据库引擎,其性能要优于 Core Data 和 FMDB - 移动端数据库性能比较, 我们可以在 Android 端 re ...

  5. Codeforce 1255 Round #601 (Div. 2)D. Feeding Chicken (模拟)

    Long is a huge fan of CFC (Codeforces Fried Chicken). But the price of CFC is increasing, so he deci ...

  6. Nginx模块开发(2)————下载文件

    Nginx的HTTP模块下载文件和传送缓冲区的字符串差不多,只需将文件标志置为1即可,我转送的文件是mp3的,所以HTTP的那个mine 类型要写为audio/mp3,二话不说了,贴代码,代码和之前那 ...

  7. python——import日常学习记录

    import为导入包,有两种方法,一个是import,一个是from ** import  ** import后紧跟着的是个模块,一般是一个.py文件下的类名: from *** import *** ...

  8. MYSQL数据库配置安装、重置密码以及工具连接

    一.下载mysql安装包 下载地址:https://dev.mysql.com/downloads/mysql/ 下载解压好之后,就是一个文件夹的形式. 二.配置环境变量 环境变量的配置,就是把MyS ...

  9. jQuery中的查找节点、创建节点、插入节点、删除节点、替换节点、复制节点操作方法

    jQuery操作节点我们可以分六点来讲,查找节点.创建节点.插入节点.删除节点.替换节点.复制节点. 一.查找节点 text() - 设置或返回所选元素的文本内容   ,html() - 设置或返回所 ...

  10. Collection接口【集合】和Iterator迭代器类

    1.1集合的概述 前面基础学习并使用过集合ArrayList<E>,那么集合究竟是什么呢? 集合:集合是Java中提供的一种容器,可以用来存储多个数据. 那么意思就是说集合是容器,但是容器 ...