博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nssl1458-HR 的疑惑【枚举】
阅读量:2022 次
发布时间:2019-04-28

本文共 914 字,大约阅读时间需要 3 分钟。

正题


题目大意

给出 n n n,求 [ 1.. n ] [1..n] [1..n]中有多少个数可以被 a b ( b > 1 ) a^b(b>1) ab(b>1)表示


解题思路

首先如果 b b b等于 2 2 2,那么可以被表示的数就是 n \sqrt n n

b b b不是质数时,显然所以的数都可以被一个 b b b是质数的情况表示。

b b b大于等于三时, a a a的个数级别不超过 1 0 6 10^6 106,所以我们枚举后面的数。

需要考虑重复如 4 3 = 8 2 4^3=8^2 43=82,其实这个重复本质上就是 ( 2 2 ) 3 = ( 2 3 ) 2 (2^2)^3=(2^3)^2 (22)3=(23)2,也就是说如果 a a a可以表示为 k q ( q < b ) k^q(q<b) kq(q<b)时,那么 a b a^b ab一定已经被计算过了


c o d e code code

#include
#include
#include
#include
#include
#define ll long longusing namespace std;ll n,ans;bool v[100],M[1000100];int main(){
scanf("%lld",&n); ans=(long long)(sqrt(1.0*n)); for(ll i=1;i*i<=1e6;i++) M[i*i]=1; for(ll i=2;i<64;i++){
if(v[i])continue; for(ll j=i;j<64;j+=i) v[j]=1; if(i==2)continue; ll k=1,z; for(;pow(k,i)<=n;k++) if(!M[k])ans++; for(k=1;(z=pow(k,i))<=n;k++) if(z<=1e6)M[z]=1; else break; } printf("%lld",ans);}

转载地址:http://bdwaf.baihongyu.com/

你可能感兴趣的文章
Hadoop Streaming 实战: 文件分发与打包
查看>>
Spring4+quartz2集群借助邮箱或是短信实现生日的农历提醒(Quartz实现农历、阴历、公历生日提醒)...
查看>>
防止页面后退(使浏览器后退按钮失效)
查看>>
浅谈CAS在分布式ID生成方案上的应用
查看>>
漫说单例模式--宝宝成长记 你真的了解了吗?
查看>>
Java 序列化和反序列化
查看>>
Spring事务配置的五种方式【转】
查看>>
[转]利用 Linux crontab 定时执行 PHP
查看>>
新人讨论一:事务和两阶段提交
查看>>
HTTP高并发测试
查看>>
获取表单中checkboxgroup所有选中值
查看>>
群晖如何实现不在同一网段的访问
查看>>
知识图谱学习笔记(五)——实体识别(1)
查看>>
Pytorch框架学习(10)——损失函数
查看>>
pytorch框架学习(17)——模型的保存与加载
查看>>
搭建Spark集群详细步骤(2)
查看>>
搭建Spark集群详细步骤(3)
查看>>
【解决问题】OpenCV(3.4.1) Error: Parsing error (xx.yaml(13): Incorrect indentation) in icvYMLParseValue
查看>>
Qt之QLineEdit详解(附源码)
查看>>
浅析“高斯白噪声”,“泊松噪声”,“椒盐噪声”的区别
查看>>