LightOJ1220
题目链接: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的更多相关文章
- Lightoj-1220
https://vjudge.net/problem/LightOJ-1220 求x=bp中最大的p,x可能为负数. 因数分解,x=p1x1*p2x2*...*pnxn x=(p1x1'*p2x2'* ...
- LightOJ1220 —— 质因数分解
题目链接:https://vjudge.net/problem/LightOJ-1220 1220 - Mysterious Bacteria PDF (English) Statistics ...
- LightOJ-1220 Mysterious Bacteria 唯一分解定理 带条件的最大公因数
题目链接:https://cn.vjudge.net/problem/LightOJ-1220 题意 给x=y^p,问p最大多少 注意x可能负数 思路 唯一分解定理,求各素因数指数的GCD 注意负数的 ...
- 毒瘤阅读题 LightOJ - 1220
Mysterious Bacteria LightOJ - 1220 https://vjudge.net/problem/LightOJ-1220 "Each case starts wi ...
- LightOJ - 1341 Aladdin and the Flying Carpet 唯一分解定理LightOJ 1220Mysterious Bacteria
题意: ttt 组数据,第一个给定飞毯的面积为 sss,第二个是毯子的最短的边的长度大于等于这个数,毯子是矩形但不是正方形. 思路: 求出 sss 的所有因子,因为不可能是矩形,所以可以除以 222, ...
随机推荐
- 基于docker-compose部署LNMP
一.配置环境 [root@docker ~]# systemctl stop firewalld[root@docker ~]# iptables -F[root@docker ~]# setenfo ...
- 利用requests, beautifulsoup包爬取股票信息网站
这是第一次用requests, beautifulsoup实现爬虫,此次爬取的是一个股票信息网站:http://www.gupiaozhishi.net.cn. 实现非常简单,只是为了demo使用的数 ...
- php安装igbinary扩展(windows)
pecl.php.net 是php的扩展仓库,访问此网站后,搜索需要安装的扩展,截图如下: igbinary: http://pecl.php.net/package/redis github的网址: ...
- 上传组件Fine Uploader在ASP.NET中的应用
现如今,世面上流行着许多前端上传组件,例如:Uploadify(http://www.uploadify.com/),Fine Uploader,等等.这篇博客从头开始,介绍如何在ASP.NET MV ...
- andorid jar/库源码解析之错误提示
目录:andorid jar/库源码解析 错误: 错误1: Error: Static interface methods are only supported starting with Andro ...
- 1-MyBatisPlus教程(一)
1,简介 官网:http://mp.baomidou.com/ 参考教程:http://mp.baomidou.com/guide/ MyBatis-Plus(简称 MP)是一个 MyBatis 的增 ...
- turtle库应用实例-五角星绘制
五角星绘制 ...
- G - Island Transport 网络流
题目: In the vast waters far far away, there are many islands. People are living on the islands, and a ...
- 从零开始学习docker之在docker中搭建redis(集群)
docker搭建redis集群 docker-compose是以多容器的方式启动,非常适合用来启动集群 一.环境准备 云环境:CentOS 7.6 64位 二.安装docker-compose #需要 ...
- u-boot: Not enough room for program headers, try linking with -N
在编译u-boot的时候出现了以下错误: arm-linux-gnueabi-ld.bfd: u-boot: Not enough room for program headers, try link ...