洛谷 P1463 [HAOI2007]反素数ant

    xiaoxiao2021-08-15  178

    题目描述

    对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。

    如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数。例如,整数1,2,4,6等都是反质数。

    现在给定一个数N,你能求出不超过N的最大的反质数么?

    输入输出格式

    输入格式:

    一个数N(1<=N<=2,000,000,000)。

    输出格式:

    不超过N的最大的反质数。

    输入输出样例

    输入样例#1: 1000 输出样例#1: 840 意思是求一个1到n以内的数,使得这个数有最多的约数。如果有多解,只找最小的那个。 (读题困难症) 首先素数个数不会超过12,枚举指数,暴搜。 #include<iostream> #include<cstdio> using namespace std; long long n,mx,ans,pri[]={0,2,3,5,7,11,13,17,19,23,29,31,37}; void dfs(int u,long long sum,long long res) { if(u>12) return ; if(sum>mx||sum==mx&&res<ans) { mx=sum; ans=res; } long long pw=1,cnt=0; while(pw*res<=n) { dfs(u+1,sum*(cnt+1),res*pw); pw*=pri[u]; cnt++; } } int main() { scanf("%lld",&n); dfs(1,1,1); printf("%lld\n",ans); return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-676401.html

    最新回复(0)