2020牛客寒假算法基础集训营6 E.立方数(唯一分解定理 素数筛)
2024-09-02 18:45:16
https://ac.nowcoder.com/acm/contest/3007/E
放下题解
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = ;
ll vis[maxn*],prime[maxn],prime_3[maxn];
ll tot = ;
void getPrime(){
memset(vis,,sizeof(vis));
for(ll i=;i<=maxn;i++){
if(!vis[i])prime[tot++]=i,prime_3[tot-] = i*i*i;
for(ll j=;j<tot;j++){
if(prime[j]*i>maxn)break;
vis[prime[j]*i]=;
if(i%prime[j]==)break;
}
}
} int main(){
getPrime();
int t;scanf("%d",&t);
while(t--){
ll n;
ll ans = ;
scanf("%lld",&n);
for(int i = ;i<tot&&prime[i]<=n;i++){
while(n%prime_3[i] == ){
ans *=prime[i];
n/=prime_3[i];
}
while(n%prime[i] == ){
n/=prime[i];
}
}
int L = , R = ;
while(L<=R){//二分试除
int mid = (L+R)/;
if((ll)mid*mid*mid<n) L = mid + ;
else R = mid - ;
}
if((ll)L*L*L == n) ans*=L;
printf("%lld\n",ans);
}
return ;
}
最新文章
- listener does not currently know of SID项目部署报数据库错
- 最快让你上手ReactiveCocoa之进阶篇
- [修复] Firemonkey 画线问题(Android &; iOS 平台)
- 你真的了解UITableViewCell重用吗?
- Tyvj P1175 机器人
- 如何在网页端启动WinForm 程序
- 【leetcode】Best Time to Buy and Sell 2(too easy)
- Struts2之类型转换器
- vim之插入
- [ActionScript 3.0] Away3D 官网实例
- Notepad++中的颜色属性大全
- C#获取千分位,给数字加逗号分隔符
- Java泛型类和泛型方法
- Android进阶(十九)AndroidAPP开发问题汇总(三)
- Docker 创建 Crowd3.3.2 以及打通 Jira Software7.12.3和Confluence6.12.2 SSO 单点登录
- Python-爬虫-Beautifulsoup解析
- Django 创建超级用户
- Mad Libs游戏1
- asp.net mvc 微信公众号token验证
- OpenStack 图形化服务 Horizon使用(十三)