[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;
}

浙公网安备 33010602011771号