[SDOI2005]反素数

题目描述

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

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

现在给定一个数N,你能求出不超过N的最大的反质数么(即后面没有g比它大的),如有多个,则去最小?

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

输入样例#1:

1000

输出样例#1:

840

题解:

搜索+数论

可知一个数分解为x=p1^q1*p2^q2*p3^q3...时

因数个数为(q1+1)*(q2+1)*(q3+1)....

解释一下题意:

假设ans<ans2,g(ans)==g(ans2),

因为不满足g(ans)<g(ans2),所以ans后没有反质数。所以搜索时除取最大的g值时

还要判断g值相同时的反质数大小。

预处理出13个质数,因为13个质数积大于2e9,在处理出n之内prime[i]^j的值

存在p[i][j]里。

搜索每一个质数的指数。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 using namespace std;
 6 long long n,p[21][40],anss,ans=2e9;
 7 int prime[21];
 8 void dfs(int x,long long num,long long sum)
 9 {int i;
10     if (sum>n) return;
11     if (num>anss)
12         {
13             anss=num;
14             ans=sum;
15         }
16         if (num==anss)
17         {
18             ans=min(ans,sum);
19         }
20     if (x>13)
21     {
22         return;
23     }
24     for (i=1;i<=36;i++)
25     {
26     if (p[x][i]==0) break;
27         if (p[x][i]&&sum*p[x][i]<=n)
28         {
29             dfs(x+1,num*(i+1),sum*p[x][i]);
30         }
31     }
32 }
33 int main()
34 {int i,j;
35     cin>>n;
36     prime[1]=2;prime[2]=3;prime[3]=5;prime[4]=7;
37     prime[5]=11;prime[6]=13;prime[7]=17;prime[8]=19;
38     prime[9]=23;prime[10]=29;prime[11]=31;prime[12]=37;
39     prime[13]=41;
40     for (i=1;i<=13;i++)
41     {
42         long long x=1;
43         for (j=1;j<=36;j++)
44         {x*=prime[i];
45             if (x>n) break;
46          p[i][j]=x;
47         }
48     }
49   dfs(1,1,1);
50   cout<<ans;
51 }
时间: 2024-10-29 20:01:56

[SDOI2005]反素数的相关文章

洛谷 P1463 [SDOI2005]反素数ant

P1463 [SDOI2005]反素数ant 题目描述 对于任何正整数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思

P1463 [SDOI2005]反素数ant

P1463 [SDOI2005]反素数ant 题目描述 对于任何正整数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

[SDOI2005]反素数ant

题目描述 对于任何正整数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 根据整数的唯一分解定理,每个反素数都可以分解为

洛谷 P1463 [SDOI2005]反素数ant &amp;&amp; codevs2912反素数

题目描述 对于任何正整数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 这道题很明显要找到的是不大于n的约数数最多的数里面最小的因为

反素数 -- 数学

反素数就是区间内约数个数最多的那个数. 在ACM题目里, 一般是求约数最多而且数字最小的那个数,[1--n] 二是求约数刚好等于n的最小的那个数 三是求区间里的最小反素数[beign,end] 1和3有区别吗?有,1可以加速,3只能暴力 先说下思路 思路 : 官方题解 : (1)此题最容易想到的是穷举,但是肯定超时. (2)我们可以知道,计算约数的个数和质因数分解有着很大的联系: 若Q的质因数分解为:Q=p1^k1*p2^k2*…*pm^km(p1…pm为素数,k1…km≥1),则Q有(k1+1

反素数(暴力)

反素数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5194    Accepted Submission(s): 3043 Problem Description 反素数就是满足对于任意i(0<i<x),都有g(i)<g(x),(g(x)是x的因子个数),则x为一个反素数.现在给你一个整数区间[a,b],请你求出该区间的x

反素数深度分析

装载自:http://blog.csdn.net/ACdreamers/article/details/25049767 小知识点: 如果求约数的个数 756=2^2*3^3*7^1 (2+1)*(3+1)*(1+1)=24 基于上述结论,给出算法:按照质因数大小递增顺序搜索每一个质因子,枚举每一个质因子 为了剪枝: 性质一:一个反素数的质因子必然是从2开始连续的质数. 因为最多只需要10个素数构造:2,3,5,7,11,13,17,19,23,29 性质二:p=2^t1*3^t2*5^t3*7

poj 2886 Who Gets the Most Candies?(线段树+约瑟夫环+反素数)

Who Gets the Most Candies? Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 9934   Accepted: 3050 Case Time Limit: 2000MS Description N children are sitting in a circle to play a game. The children are numbered from 1 to N in clockwise o

【BZOJ 1053】 1053: [HAOI2007]反素数ant (反素数)

1053: [HAOI2007]反素数ant Description 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x ,则称x为反质数.例如,整数1,2,4,6等都是反质数.现在给定一个数N,你能求出不超过N的最大的反质数么 ? Input 一个数N(1<=N<=2,000,000,000). Output 不超过N的最大的反质数. Sample Input 1000 Sample Output