洛谷 P1463 [HAOI2007]反素数

https://www.luogu.org/problemnew/show/P1463

注意到答案就是要求1-n中约数最多的那个数(约数个数相同的取较小的)

根据约数个数的公式,在约数个数相同的情况下,如果各个质因子是从2开始的连续质数且指数不下降,那么一定可以得到最小的结果

玄学爆搜即可。。。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<vector>
 5 #include<bitset>
 6 using namespace std;
 7 #define fi first
 8 #define se second
 9 #define mp make_pair
10 #define pb push_back
11 typedef long long ll;
12 typedef unsigned long long ull;
13 typedef pair<ll,ll> pll;
14 const ll N=100000;
15 ll n;
16 ll prime[100100],len;
17 pll ans;
18 bool nprime[100100];
19 void dfs(ll x,ll k,ll p,ll maxn)
20 {
21     if(ans.se<k||(ans.se==k&&ans.fi>x))    ans=pll(x,k);
22     if(maxn==0)    return;
23     ll i,now=1;
24     for(i=0;i<=maxn;i++)
25     {
26         if(now*x>n)    break;
27         dfs(now*x,k*(i+1),p+1,i);
28         now*=prime[p];
29     }
30 }
31 int main()
32 {
33     ll i,j;
34     scanf("%lld",&n);
35     for(i=2;i<=N;i++)
36     {
37         if(!nprime[i])    prime[++len]=i;
38         for(j=1;j<=len&&i*prime[j]<=N;j++)
39         {
40             nprime[i*prime[j]]=1;
41             if(i%prime[j]==0)    break;
42         }
43     }
44     dfs(1,1,1,233333333);
45     printf("%lld",ans.fi);
46     return 0;
47 }

 

posted @ 2018-07-30 08:33  hehe_54321  阅读(171)  评论(0编辑  收藏  举报
AmazingCounters.com