[POI 2001 R1 / HAOI2007] 反素数题解

题目描述

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

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

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

输入格式

仅一行一个正整数 N。

输出格式

仅一行一个正整数,代表不超过 N 的最大的反素数。

输入输出样例

输入 #1复制

1000

输出 #1复制

840

说明/提示

对于所有数据,有 1≤N≤2×109。

思路

打表。

代码见下

#include<bits/stdc++.h>
using namespace std;
long long p[500]={1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260,1680,2520,5040,7560,10080,15120,20160,25200,27720,45360,50400,55440,83160,110880,166320,221760,277200,332640,498960,554400,665280,720720,1081080,1441440,2162160,2882880,3603600,4324320,6486480,7207200,8648640,10810800,14414400,17297280,21621600,32432400,36756720,43243200,61261200,73513440,110270160,122522400,147026880,183783600,245044800,294053760,367567200,551350800,698377680,735134400,1102701600,1396755360,2001000000,1000000000000000007ll};
long long n;
int main(){
    cin>>n;
    for(int i=1;;i++){
        if(p[i]>=n+1){
            cout<<p[i-1]<<endl;
            return 0;
        }
    }
    return 0;
}

posted @ 2025-10-16 11:49  bz02_2023f2  阅读(7)  评论(0)    收藏  举报  来源