TopCoder SRM 582 Div 1 - Problem 1000 SemiPerfectPower
首先我们可以把答案差分,那么我们只需要求出\(1\)~\(x\)范围内的满足条件的数即可.
题目要求的应该是这个东西的个数:
\(l \leq a*b^c \leq r(1 \le a < b)\)的个数
我们首先对于问题仔细分析一波,发现\(c>3\)显然不需要考虑.
- \(c>3\)且\(c\)是偶数.
显然\(a*b^{2k}=a*({b^k})^2\),显然如果\(a<b\)那么\(a<b^k(k>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的更多相关文章
- TopCoder SRM 560 Div 1 - Problem 1000 BoundedOptimization & Codeforces 839 E
传送门:https://284914869.github.io/AEoj/560.html 题目简述: 定义"项"为两个不同变量相乘. 求一个由多个不同"项"相 ...
- TopCoder SRM 558 Div 1 - Problem 1000 SurroundingGame
传送门:https://284914869.github.io/AEoj/558.html 题目简述 一个人在一个n * m棋盘上玩游戏,想要占领一个格子有两个方法: 在这个格子放一个棋子. 这个 ...
- TopCoder SRM 566 Div 1 - Problem 1000 FencingPenguins
传送门:https://284914869.github.io/AEoj/566.html 题目简述: 平面上有中心在原点,一个点在(r,0)处的正n边形的n个顶点.平面上还有m个企鹅,每个企鹅有一个 ...
- TopCoder SRM 561 Div 1 - Problem 1000 Orienteering
传送门:https://284914869.github.io/AEoj/561.html 题目简述: 题外话: 刚开始看题没看到|C|<=300.以为|C|^2能做,码了好久,但始终解决不了一 ...
- TopCoder SRM 559 Div 1 - Problem 900 CircusTents
传送门:https://284914869.github.io/AEoj/559.html 题目简述: n个实心圆,两两没有交集,在第一个圆上找一个点,使得它到另外一个圆上某个点的最短距离的最小值尽量 ...
- TopCoder SRM 667 Div.2题解
概览: T1 枚举 T2 状压DP T3 DP TopCoder SRM 667 Div.2 T1 解题思路 由于数据范围很小,所以直接枚举所有点,判断是否可行.时间复杂度O(δX × δY),空间复 ...
- TopCoder SRM 642 Div.2 1000 --二分+BFS
题意: 给你一张图,N个点(0~N-1),m条边,国王要从0到N-1,国王携带一个值,当走到一条边权大于此值的边时,要么不走,要么提升该边的边权,提升k个单位花费k^2块钱,国王就带了B块钱,问能携带 ...
- TopCoder SRM 596 DIV 1 250
body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...
- Topcoder SRM 656 (Div.1) 250 RandomPancakeStack - 概率+记忆化搜索
最近连续三次TC爆零了,,,我的心好痛. 不知怎么想的,这题把题意理解成,第一次选择j,第二次选择i后,只能从1~i-1.i+1~j找,其实还可以从j+1~n中找,只要没有被选中过就行... [题意] ...
随机推荐
- html中a标签的4个伪类样式
在CSS超链接的属性中,有四个连接方式:a:link a:hover a:visited a:acticve 之前在使用的时候一直是按照自认为的顺序中去写的,就是 L H V A的排序方式,然而有些时 ...
- vue 做的tabBar组件
效果如下 调用 <tabbar :selected='selected'></tabbar> 组件 <template> <div class='tabbar ...
- linux操作常用命令
此篇文章是根据自己经常使用的命令进行记录备忘,不断更新 防火墙(centos7) 永久开放某个端口号: firewall-cmd --zone=public --add-port=8080/tcp - ...
- SVM-支持向量机总结
一.SVM简介 (一)Support Vector Machine 支持向量机(SVM:Support Vector Machine)是机器学习中常见的一种分类算法. 线性分类器,也可以叫做感知机,其 ...
- MySQL binlog反解析
反解析delete语句 背景:delete table忘了加条件导致整张表被删除 恢复方式:直接从binlog里反解析delete语句为insert进行恢复 导出删指定表的DELETE语句: # my ...
- djangoNotes
学员管理 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- PHP经典面试题01
五.基础及程序题(建议使用你擅长的语言:C/C++.PHP.Java) 5.写一个排序算法,可以是冒泡排序或者是快速排序,假设待排序对象是一个维数组.(提示:不能使用系统已有函数,另外请仔细回忆以前学 ...
- 制作一个简单的部门员工知识分享的python抽取脚本
需求: 基于公司的文化和公司部门间以及员工之间的工作需求状态,或者想要了解某一些技能.专业方面的知识需求.促进并提高员工们的技能认知和技术水平. 详细代码如下: 先说一下存入csv表格的表头字段: 1 ...
- HTML&CSS基础-清除浮动
HTML&CSS基础-清除浮动 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看浮动效果 1>.HTML源代码 <!DOCTYPE html> &l ...
- <<构建之法>>--第二次作业
GIT地址 https://github.com/Panghu98/AchaoCalculator.git GIT用户名 Panghu98 学号后五位 62632 博客地址 https://www.c ...