首先我们可以把答案差分,那么我们只需要求出\(1\)~\(x\)范围内的满足条件的数即可.

题目要求的应该是这个东西的个数:

\(l \leq a*b^c \leq r(1 \le a < b)​\)的个数

我们首先对于问题仔细分析一波,发现\(c>3\)显然不需要考虑.

  1. \(c>3\)且\(c\)是偶数.

显然\(a*b^{2k}=a*({b^k})^2\),显然如果\(a<b\)那么\(a<b^k(k>1)\)

  1. \(c>3\)且\(c\)是奇数.

显然\(a*b^{2k+1}=(a*b)*({b^k})^2\),显然如果\(a<b\)那么\(a<b^{k-1}(k>1)\)

所以现在我们成功把题目转换成了两种情况:\(c=2\)|\(c=3\)

单独计算\(c=2\)和\(c=3\)都十分的简单,但是极其有可能有这样子的情况:

\(a*x^2=b*y^3\)

这个时候我们就需要排除这种情况.

不妨先把\(a*x^2\)算出来,那么只需要计算满足\(b*y^3\)且\(a \ge x\)

\(a*x^2\)显然只需要枚举\(i \in [1,\sqrt[3]{x}]\)然后就是\(\sqrt{x/i}-i\),因为要排除掉\(a \ge x\)的情况.

现在问题就在于如何统计\(b*y^3 \leq x\)且\(a*x^2(a \ge x)\)

我们推一波式子:

下面是手写稿,主要是不想写\(LaTeX\)了.





/*
mail: mleautomaton@foxmail.com
author: MLEAutoMaton
This Code is made by MLEAutoMaton
*/
#include<bits/stdc++.h>
using namespace std;
const int M=430890,N=16820;
class SemiPerfectPower{
public:
vector<int>son[M],sum[N];
int mu[M],thr_out[M];
int pfg(long long x){
int l=0,r=3e8,ret=0;
while(l<=r){
int mid=(l+r)>>1;
if(1ll*mid*mid<=x){ret=mid;l=mid+1;}
else r=mid-1;
}
return ret;
}
int lfg(long long x){
int l=0,r=M,ret=0;
while(l<=r){
int mid=(l+r)>>1;
if(1ll*mid*mid*mid<=x){ret=mid;l=mid+1;}
else r=mid-1;
}
return ret;
}
long long solve(long long x){
long long ans=0;
for(int i=1;1ll*i*i*i<=x;i++)if(mu[i])ans+=pfg(x/i)-i;
for(int i=1;1ll*i*i*i*i<=x;i++)
if(!thr_out[i])
for(int j=1;j*j*j<=i;j++){
int d=__gcd(j*j,i);
if(!mu[i/d])continue;
int k=j*j/d,l=i/k,r=lfg(x/i)/k;
for(int u:son[i/d])ans+=mu[u]*(sum[u][r/u]-sum[u][l/u]);
}
return ans;
}
long long count(long long l,long long r){
mu[1]=1;
for(int i=1;i<M;i++)if(mu[i])for(int j=i<<1;j<M;j+=i)mu[j]-=mu[i];
for(int i=1;i<M;i++)if(mu[i])for(int j=i;j<M;j+=i)if(mu[j])son[j].push_back(i);
for(int i=2;i*i*i<M;i++)for(int j=i*i*i;j<M;j+=i*i*i)thr_out[j]=1;
for(int i=1;i<N;i++){
sum[i].resize(M/i+1);
sum[i][0]=0;
for(int j=1;j<M/i+1;j++)
sum[i][j]=sum[i][j-1]+(mu[i*j]!=0);
}
return solve(r)-solve(l-1);
}
};

TopCoder SRM 582 Div 1 - Problem 1000 SemiPerfectPower的更多相关文章

  1. TopCoder SRM 560 Div 1 - Problem 1000 BoundedOptimization & Codeforces 839 E

    传送门:https://284914869.github.io/AEoj/560.html 题目简述: 定义"项"为两个不同变量相乘. 求一个由多个不同"项"相 ...

  2. TopCoder SRM 558 Div 1 - Problem 1000 SurroundingGame

    传送门:https://284914869.github.io/AEoj/558.html 题目简述  一个人在一个n * m棋盘上玩游戏,想要占领一个格子有两个方法: 在这个格子放一个棋子.  这个 ...

  3. TopCoder SRM 566 Div 1 - Problem 1000 FencingPenguins

    传送门:https://284914869.github.io/AEoj/566.html 题目简述: 平面上有中心在原点,一个点在(r,0)处的正n边形的n个顶点.平面上还有m个企鹅,每个企鹅有一个 ...

  4. TopCoder SRM 561 Div 1 - Problem 1000 Orienteering

    传送门:https://284914869.github.io/AEoj/561.html 题目简述: 题外话: 刚开始看题没看到|C|<=300.以为|C|^2能做,码了好久,但始终解决不了一 ...

  5. TopCoder SRM 559 Div 1 - Problem 900 CircusTents

    传送门:https://284914869.github.io/AEoj/559.html 题目简述: n个实心圆,两两没有交集,在第一个圆上找一个点,使得它到另外一个圆上某个点的最短距离的最小值尽量 ...

  6. TopCoder SRM 667 Div.2题解

    概览: T1 枚举 T2 状压DP T3 DP TopCoder SRM 667 Div.2 T1 解题思路 由于数据范围很小,所以直接枚举所有点,判断是否可行.时间复杂度O(δX × δY),空间复 ...

  7. TopCoder SRM 642 Div.2 1000 --二分+BFS

    题意: 给你一张图,N个点(0~N-1),m条边,国王要从0到N-1,国王携带一个值,当走到一条边权大于此值的边时,要么不走,要么提升该边的边权,提升k个单位花费k^2块钱,国王就带了B块钱,问能携带 ...

  8. TopCoder SRM 596 DIV 1 250

    body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...

  9. Topcoder SRM 656 (Div.1) 250 RandomPancakeStack - 概率+记忆化搜索

    最近连续三次TC爆零了,,,我的心好痛. 不知怎么想的,这题把题意理解成,第一次选择j,第二次选择i后,只能从1~i-1.i+1~j找,其实还可以从j+1~n中找,只要没有被选中过就行... [题意] ...

随机推荐

  1. 同步IO,异步IO,阻塞,非阻塞的定义与区别

    异步I/O 是指用户程序发起IO请求后,不等待数据,同时操作系统内核负责I/O操作把数据从内核拷贝到用户程序的缓冲区后通知应用程序.数据拷贝是由操作系统内核完成,用户程序从一开始就没有等待数据,发起请 ...

  2. iOS - 处理通话或录音状态中界面错乱的重布局

    iphone设备在通话或录音状态中,状态栏下移了20个像素,这时controller的view的frame的高度就减少了20个像素,所以我们需要根据view的frame去布局子view.但是是,当状态 ...

  3. dede织梦如何去除网站底部的版权信息

    dede织梦如何删除版权powered by?在织梦中,特别是在仿站之中,经常会在首页的底部出现powered by,这是dedecms织梦系统底部自带的官方链接power by等字样,很多新用户想去 ...

  4. stm32 引脚映射 和 ADC

    老是弄不明白ADC的输入到底在哪,看了stm32F103Ve的datasheet,将引脚和通道的映射关系贴在下面: 好了,写到这,我已经看了中文手册一上午了,可是啥都没看懂,下午接着看,写代码不重要, ...

  5. linux文件比较

    Linux文件比较指令有两个,comm和diff,其中comm要求的是排序过得文件.Diff则没有这个要求,diff的输出结果主要是用来表明文件一经过怎样的修改可以得到文件二. Comm Comm的语 ...

  6. shell 文本处理三剑客之 grep 和 egrep

    shell 三剑客之 grep 命令语法格式 grep 参数 案例 显示file中有python的行 grep python file 显示没有python的行,不忽略大小写 grep -v pyth ...

  7. python之命名空间与作用域

    一.命名空间与作用域 在命名空间中的名称能将任何python对象作为值,在不同的命名空间中相同的名称可以与不同的对象相关联.但是,如果存在名称解析协议,则多个命名空间可以一起工作来解析名称.也就是说, ...

  8. 《AlwaysRun!团队》第四次作业:项目需求调研与分析

     项目  内容  这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/  这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daiz ...

  9. 使用Scrapy框架爬取腾讯新闻

    昨晚没事写的爬取腾讯新闻代码,在此贴出,可以参考完善. # -*- coding: utf-8 -*- import json from scrapy import Spider from scrap ...

  10. java中的assert

    Java陷阱之assert关键字   一.概述   在C和C++语言中都有assert关键,表示断言. 在Java中,同样也有assert关键字,表示断言,用法和含义都差不多.   二.语法   在J ...