AcWing 198. 反素数 约数个数+dfs

Posted karshey

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 198. 反素数 约数个数+dfs相关的知识,希望对你有一定的参考价值。


参考

约数个数:每个质因数的次数+1的乘积。
2e9<2x3x5x7x11x13x17x19x23;
2e9<pow(2,31);
last其实是最多扫30次。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//求出第一个约数个数最大的数======================
const int N=2e5+10;
int n;
int maxn,number; 
int pri[9]={2,3,5,7,11,13,17,19,23};
//指数之和不超过30 

void dfs(int u,int last,int p,int s)//质数扫描指针 次数还剩几次,number,约数个数 
{
	if(s>maxn||(s==maxn&&p<number))
	{
		number=p;
		maxn=s;
	}
	//全都扫了一遍 
	if(u==9) return;
	
	for(int i=1;i<=last;i++)
	{
		if((ll)pri[u]*p>n) break;
		p*=pri[u];
		dfs(u+1,i,p,s*(i+1));//这里如果不走dfs,那么就会走pow(2,30);
	}
}
int main()
{
	cin>>n;
	dfs(0,30,1,1);
	cout<<number;
	return 0; 
}

以上是关于AcWing 198. 反素数 约数个数+dfs的主要内容,如果未能解决你的问题,请参考以下文章

《算法竞赛进阶指南》0x32约数

Luogu P1463 [HAOI2007]反素数ant:数学 + dfs反素数

198. 反素数数论

[luogu]P1463 [SDOI2005]反素数ant[dfs][数学][数论]

[POI2002][HAOI2007]反素数(Antiprime)

反素数 -- 数学