AcWing 198. Número anti-primo --------------------------------------------- número 论()

Para cualquier número entero positivo x, el número de divisores se registra como g (x), por ejemplo, g (1) = 1, g (6) = 4.

Si un entero positivo x satisface: para cualquier entero positivo i menor que x, todos tienen g (x)> g (i), entonces x se llama primo inverso

Por ejemplo, los enteros 1, 2, 4, 6, etc. son todos primos inversos.

Ahora dado un número N, solicite el número primo negativo más grande que no exceda N.

Formato de entrada
Un entero positivo N.

Formato de salida
Un entero que representa el número primo inverso máximo que no excede N.

Rango de datos
1≤N≤2 ∗ 109
Muestra de entrada:
1000
Muestra de salida:
840

Análisis: El
número anti-primo más grande en 1 ~ N es el más pequeño del número más grande en
1 ~ N. Los diferentes factores primos de cualquier número en 1 ~ N no excederán 10, porque 2 ∗ 3 ∗ 5 ∗ 7 ∗ 11 ∗ 13 ∗ 17 ∗ 19 ∗ 23 * 29> 2 ∗ 109

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int prime[9]={2,3,5,7,11,13,17,19,23}; 
int n;
int maxcnt,maxn;
void dfs(int u,int last,int p,int s)
{
	if(s>maxcnt||s==maxcnt&&p<maxn)
	{
		maxcnt=s;
		maxn=p;
	}
	if(u==9) return ;
	for(int i=1;i<=last;i++)
	{
		if((ll)p*prime[u]>n) break;
		p*=prime[u];
		dfs(u+1,i,p,s*(i+1));
	}
}
int main()
{
	scanf("%d",&n);
	dfs(0,30,1,1);//参数分别为:第几个质数/幂次/乘积/约数个数
	cout<<maxn<<endl;
}
572 artículos originales publicados · elogiados 14 · 10,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/qq_43690454/article/details/105430909
Recomendado
Clasificación