首页 > 其他分享 >[PA2011] Prime prime power

[PA2011] Prime prime power

时间:2024-01-18 19:44:28浏览次数:24  
标签:Prime prime set power int isp tp st init

分析

注意到本题用到了常用的一个套路:对 \(b\) 是否大于 \(2\) 分类讨论。

因为 \(b>2\) 也就是 \(b\ge3\) 时 \(a\le10^6\),所以考虑把 \(3\times10^6\)(因为有 \(k\) 的存在)前的质数筛出来,暴力找到 \(a^b\) 加入统计答案的 set(\(2^{60}>10^{18}\),因此 \(b\le59\))。

接下来考虑 \(b=2\) 的时候,由于 \(a^2\) 增长迅速,所以不需要枚举很多的 \(a\)。从 \(\lceil\sqrt{n}\rceil\) 开始枚举约 \(1000\) 个数的时候就可以了。

最后先把 set 中小于等于 \(n\) 的数 erase 掉,然后再 erase 掉前 \(k-1\) 个元素,再输出 set 中头元素的值就可以了。注意经常判断一下当前的数是否超过 \(10^18\)。

AC Code

#include <bits/stdc++.h>
using namespace std;
#define int long long
set<int> st;
bool isp[5000010];
int pri[5000010],cnt=0;
void init(int n)
{
	memset(isp,1,sizeof isp);
	isp[0]=isp[1]=0;
	for(int i=2;i<=n;i++)
	{
		if(!isp[i]) continue;
		pri[++cnt]=i;
		for(int j=i*i;j<=n;j+=i) isp[j]=0;
	}
}
int ispr(int k)
{
	for(int i=2;i*i<=k;i++) if(k%i==0) return 0;
	return 1;
}
signed main()
{
	int n,k;
	cin>>n>>k;
	init(3e6);
	for(int i=1;i<=cnt;i++)
	{
		int b=pri[i],p=1;
		for(int j=1;j<=cnt;j++)
		{
			while(p<pri[j])
			{
				p++;
				b*=pri[i];
				if(b>1e18) goto t;
			}
			st.insert(b);
		}
		t:;
	}
	int tp=ceil(sqrt(n));
	for(int i=1;i<=1000;i++)
	{
		if(tp*tp>1e18) break;
		if(ispr(tp)) st.insert(tp*tp);
		tp++;
	}
	while(*(st.begin())<=n) st.erase(st.begin());
	for(int i=1;i<k;i++) st.erase(st.begin());
	cout<<*(st.begin());
	return 0;
}

标签:Prime,prime,set,power,int,isp,tp,st,init
From: https://www.cnblogs.com/Crazyouth/p/17973255

相关文章

  • (0)powershell常用命令
    (0)powershell常用命令1.PowerShell判断数组里面是否包含指定字符串元素判断数组是否包含指定元素PSC:\WINDOWS\system32>$arrColors="blue","red","green","yellow","white","pink","orange","turquoise"......
  • (7)Powershell算术运算符
    (7)Powershell算术运算符本系列博客从这一节开始是Powershell的语法知识,在开始学习语法之前,希望你对Powershell有个基本的了解,比如开发工具的使用,面向对象等特性,详细内容使劲戳这里(1)-(6)的内容。本节主要介绍Powershell中的算术运算符。Powershell支持以下算术运算符......
  • Power BI - 5分钟学习新增自定义列
    每天5分钟,今天介绍PowerBI新增自定义列我们在日常工作中有时需要对导入的数据进行额外处理,如两个字符串列拼接【产品编号】+【产品名称】,或者【数据量】*【价格】得到销售值等等。 以计算产品销售为例,导入样例数据,请看样例内容:(Excel数据源导入请参考每天5分钟第一天)。......
  • (6)Powershell中命令自动补全功能及使用Windows命令
    (6)Powershell中命令自动补全功能及使用Windows命令上一节主要介绍了Powershell中常见的别名,以及怎么通过别名查看真实的Powershell命令,Powershell别名的命名规范以及如何新建自己的别名(Powershell内置别名不可更改)以及Powershell中兼容性别名,详细内容怼介里。在本节主要包含......
  • (5)Powershell别名(Alias)
    (5)Powershell别名(Alias)在上一节,介绍了如何检索当前shell及Powershell中所有可用的命令,对于指定的命令会查看其语法信息,可以获取指定命令的帮助信息,包括获取在线帮助主题,详细内容时间戳这嘎达。在本节中,主要介绍Powershell的别名,主要包含以下内容。熟悉常见的别名。标......
  • (4)Powershell基础知识(二)
    (4)Powershell基础知识(二)上一节主要介绍Powershell可发现,面向对象,一致性等特性,以及Powershell命令是基于.Net对象等重要概念,以及Powershell命令的命名规范,详细内容点击这嘎达。这一节的Powershell基础知识主要包含以下知识点获取命令的摘要信息。获取命令的帮助信息。......
  • (3)Powershell基础知识(一)
    (3)Powershell基础知识(一)上节介绍了Windows自带的Powershell开发工具:命令行行窗体和集成开发环境ISE的启动及一些配置注意事项,具体细节使劲戳Powershell开发工具。这一节介绍Powershell的基础知识,包含以下知识点Powershell的一些特性理解Powershell中的一些重要概念......
  • 通过Power BI实现数据的实时刷新与展示2-使用Python Code无限实时刷新数据源
    上一篇讲了使用DirectQueryMode来实现数据自动刷新,但是DirectMode只能适用于Database这种数据源,很多其它的源都不行。对于其它类型的数据源,就只能另想办法了。PBI刷新可以用以下2种方式:1,在PBIDesktop中点击刷新,然后刷新完成后,再Publish2,将报告发布到WorkSpace中,然后在选中D......
  • 如何编写一个 PowerShell 脚本
    PowerShell脚本的后缀是.ps1前提:ps1脚本可以帮忙我们快速修改文件内容,还不需要调用文件的底层api,方便快捷在编写CMakeLists时发现,项目不能够很好的使用vcpkgtoolchain,哪怕是在命令行中指定vcpkg.cmake如果只是简单的项目,vcpkgtoolchain可以正常工作,但是在稍微复......
  • 通过Power BI实现数据的实时刷新与展示1-DirectQuery
    使用微软PowerBI实现数据的实时刷新并展示,一直是一个老大难问题。微软在实时刷新展示这个方面做的一直很差,目前官方自动刷新工具Gateway也仅仅能支持最小30分钟/次的频率。但是对于一些经常变动的数据30分钟的刷新频率显然是不够用的,因此就只能自力更生各凭本事了。今天就介绍一......