对于任何正整数x,其约数的个数记作g(x)。例如g(1)=1、g(6)=4。如果某个正整数x满足:g(x)>g(i) 0<i<x
,则称x为反质数。例如,整数1,2,4,6等都是反质数。现在给定一个数N,你能求出不超过N的最大的反质数么
?
标签:amp haoi2007 discus void mil lld pre printf iostream
一个数N(1<=N<=2,000,000,000)。
不超过N的最大的反质数。
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; long long n,ans = 2000000000; int sushu[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 },a; void dfs(long long num, int cishu, int cnt) { if (cnt > 9) return; if (cishu > a) { ans = num; a = cishu; } if (cishu == a && num < ans) ans = num; for (int i = 1; i <= 31; i++) { if (num * sushu[cnt] > n) return; dfs(num * sushu[cnt], cishu *(i + 1), cnt + 1); num *= sushu[cnt]; } } int main() { scanf("%lld", &n); dfs(1, 1, 0); printf("%lld\n", ans); return 0; }
标签:amp haoi2007 discus void mil lld pre printf iostream
原文地址:http://www.cnblogs.com/zbtrs/p/7284348.html