链接:https://ac.nowcoder.com/acm/contest/3007/E
来源:牛客网

题目描述:

对于给定的正整数 N,求最大的正整数 A,使得存在正整数 B,满足 A3B=N
输入包含 T 组数据,1≤T≤10,000;1≤N≤1018

输入描述:

第一行数字 T 表示数据组数
接下来一行,T 个正整数 N

输出描述:

T 行,每行一个数字表示答案

输入样例:

4
27 24 7 54

输出样例:

3
2
1
3

核心思想:

预处理:
1、欧拉线性筛,将1e6以内的素数都筛出来,存在数组pre中,a[i]=(pre[i])3
2、将1e6以内的所有数的三次方存在数组b中,用于二分查找

遍历所有素数pre[i],当N中含有a[i]时,执行:
1、ans*=pre[i]
2、N/=a[i]

1e6以内的素数有7e4个,全部遍历会超时,所以要限制循环!
当a[i]*pre[i]<=x时可以终止循环,因为当a[i]*pre[i]>x时,如果x仍可以分解出三次方,则x本身就是一个数的三次方,特殊处理即可。

注意:判断一个数是否可以开三次方,先使用pow(x,1.0/3),在pow(x,3)会造成精度损失而WA,所以二分。

代码如下:

#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
const int N=1e6+50;
ll pre[N],a[N],b[N];
int cnt;
bool vis[N];
void xss()
{for(int i=2;i<N-30;i++){if(!vis[i])pre[cnt++]=i;for(int j=0;j<cnt&&i*pre[j]<N-10;j++){vis[i*pre[j]]=1;if(i%pre[j]==0)break;}}return;
}
ll pd(ll x)
{ll t=lower_bound(b+1,b+N,x)-b;if(b[t]==x)return t;return 0;
}
int main()
{xss();for(int i=0;i<cnt;i++)a[i]=pre[i]*pre[i]*pre[i];for(int i=1;i<N;i++)b[i]=ll(i)*i*i;int T;ll x;cin>>T;while(T--){scanf("%lld",&x);ll ans=1;for(int i=0;i<cnt&&a[i]*pre[i]<=x;i++){while(x%a[i]==0){ans*=pre[i];x/=a[i];}while(x%pre[i]==0)x/=pre[i];}ll te=pd(x);if(te) ans*=te;printf("%lld\n",ans);}return 0;
}

牛客3007E-立方数-欧拉线性筛+素数分解+二分相关推荐

  1. 牛客 - lglg说要有题,于是便有了题。(欧拉线性筛+打表+思维)

    题目链接:点击查看 题目大意:给出公式,代表第i个素数,现在给出n,求出答案,对于答案保留整数 题目分析:这个题目因为涉及到了素数,先用欧拉线性筛打个素数表再说,打完了然后分析一下时间复杂度,给出的样 ...

  2. 洛谷 - P1217 [USACO1.5]回文质数 Prime Palindromes(欧拉线性筛+数论小知识)

    题目链接:点击查看 题目大意:给出一个a和b,求出区间[a,b]中所有回文质数,回文质数指的是一个数既是回文数也是质数 题目分析:首先质数好判断,我们只需要用欧拉筛预处理打好表即可,判断回文数我们也只 ...

  3. 欧拉线性筛 与 欧拉函数 + 几道例题

    欧拉线性筛 生成素数表prime[]数组 const int maxn = 1e7+5; int prime[maxn]; int visit[maxn]; void Prime(){memset(v ...

  4. 欧拉线性筛 求n的最小正因数的个数

    由算术基本定理可得: 任何一个大于1的N的自然数,如果N不为质数,可以被分解成有限个质数的乘机,即 n=(p1a1)*(p2a2)(p3a3)*--*(pnan),在这里(p1<p2<p3 ...

  5. 欧拉(线性)筛 Miller_Rabin 测试素数

    void make_prime()//欧拉筛 {is_prime[1]=is_prime[0]=true;for(int i=2;i<=1e6;i++){if(!is_prime[i]){pri ...

  6. ACM-ICPC 2018 南京赛区网络预赛 J Sum(欧拉线性筛+思维)

    Sum 问题分析 题意:我们将类似于6=2⋅36=2⋅36 = 2\cdot 3这样的数称为asquare−freeintegerasquare−freeintegera\:square-free\: ...

  7. [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉

    本文为博主原创文章,欢迎转载,请注明出处 www.cnblogs.com/yangyaojia [SDOI2008]沙拉公主的困惑 线性筛 素数+欧拉 题目大意 给定n,m,求在1到n!内与m!互质的 ...

  8. 筛表合集(素数筛 欧拉函数筛 莫比乌斯函数筛)

    [目录] 一.素数筛 1.素数判断 2.素数普通筛 3.素数线性筛 4.素数区间筛 二.欧拉函数筛 三.莫比乌斯函数筛 [素数筛] 1.直接判定质数 bool judgePrime( int num ...

  9. Euler:欧拉函数&素数筛

    一.欧拉函数 欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示. 通式:   其中p1, p2--pn为x的所有质因数,x是不为0的整数. 比如x=12,拆成质因数为12=2*2*3, ...

最新文章

  1. CNN交通场景解析--Spatial as Deep: Spatial CNN for Traffic Scene Understanding
  2. 《数学之美》第3章 统计语言模型
  3. Win7下telnet使用
  4. 浅谈SAP Cloud for Sales 自动化
  5. 数学--数论--(逆元)扩展欧几里求解+证明
  6. 常见的几种异常类型-熟记
  7. java学习(134):泛型通配符的使用
  8. SQL的数据定义功能及语句:
  9. 蚂蚁金服OceanBase挑战TPCC|TPC-C基准测试之数据库事务引擎挑战
  10. dumpe2fs命令详解
  11. java之final的各种用法
  12. 微信开发者工具小技巧——快速打开微信程序API文档。
  13. html标题居中加背景色,如何设置CSS背景宽度后让文字居中?
  14. GRE 词汇1(前缀)
  15. 法人≠法人代表≠法定代表人!
  16. 百度ueditor编辑器控制图片在编辑框中的大小
  17. 微服务实现网关统一鉴权-接口级别
  18. 《笑傲江湖》清心普善咒——曲谱(琴箫合奏曲)
  19. 头条号文章原创权益再降低申请门槛,人人都可以申请
  20. 屌丝经济”要突破的痛点在哪儿?

热门文章

  1. 横向联邦学习下隐私保护安全聚合:问题,方法,与展望
  2. 【计算机】联想拯救者Y7000安装win10后重启一直在转圈
  3. ES中 must和should并列查询问题
  4. iOS开发常用知识点(持续更新2018.6.25)
  5. JSON 解析,一款高颜值的 JSON 数据解析查看工具
  6. matplotlib eps格栅化,透明度被改变的问题 pdf->eps
  7. LVS(Linux Virtual Server,Linux虚拟服务器)开源软件创始人——章文嵩
  8. PHP初级【10天小积累-第二天】
  9. 癫痫磁共振成像:临床标准与进展
  10. Java——快手2020校园招聘秋招笔试[编程题]质因数统计