反质数问题,求不大于n的最大反质数

反质数:设f(n)表示n个约数的个数,如果对于任意x有0<x<n, f(x) < f(n),那么n就是一个反质数
  我们都知道对于任意一个数n,都可以用质数乘积的形式表示出来:x = p1^k1+p2^k2...pn^kn

  一个数n如果可以表示成 n = p1^k1 + p2^k2, 那么它的约数的个数就是 (k1+1)*(k2+1)

  ::k1个p1,可以产生k1个约数,分别是p1^1, p1^2...p1^k1, 同理k2个p2
  	那么这k1个约数与k2个约数分别相乘,又会得到k1*k2个约数
	总的约数的个数就是 k1*k2+k1+k2+1(还有就是1,也是n的一个约数,不要忘记)
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 using namespace std;
 6
 7 typedef long long LL;
 8 int p[]={2,3,5,7,11,13,17,19,23,29};
 9
10 LL n, ans, cc;
11
12 void dfs(int pos, int cnt, LL sum){    //pos,p数据的索引;cnt,约数的个数;sum,当前反质数的值
13     if(cnt > cc){
14         ans = sum;
15         cc = cnt;
16     }
17     if(cnt == cc && ans > sum)
18          ans = sum;
19     if(pos>=10) return;
20     for(int i=1; ; ++i){
21         sum*=p[pos];
22         if(sum > n) break;
23         dfs(pos+1, cnt*(i+1), sum);
24     }
25 }
26
27 int main(){
28     cin>>n;
29     ans = 0;
30     dfs(0, 1, 1);
31     cout<<ans<<endl;
32     return 0;
33 }
时间: 2024-10-07 03:59:11

反质数问题,求不大于n的最大反质数的相关文章

(算法)求1到1亿间的质数或素数

题目: 求1到1亿间的质数或素数 思路: 什么是质数? 质数(prime number)又称素数,有无限个.一个大于1的自然数,除了1和它本身外,不能被其他自然数(质数)整除,换句话说就是该数除了1和它本身以外不再有其他的因数:否则称为合数.(来自百度百科) 方法1: 遍历1到1亿间的所有数,然后逐个判断是否为质数: 如何判断一个数为质数?根据质数的定义,判断该数是否能被1和它本身之外的数整除,如果是,则不是质数,否则为质数:一般只需判断是否能被2到sqrt(num)的所有数整数. 方法2: 上

反编译Android APK及防止APK程序被反编译

原文出处 反编译Android APK及防止APK程序被反编译 怎么逆向工程对Android Apk 进行反编译 google Android开发是开源的,开发过程中有些时候会遇到一些功能,自己不知道该怎么做,然而别的软件里面已经有了,这个时候可以采用反编译的方式,解开其他的程序,来了解一些它 的做法,同时啊,还可以借鉴别人的软件结构,资源文件:作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看.此方式主要目的是为了促进开发者学习,借鉴好的代

Java小例子——穷举质数,求平方和,求质因子。

求平方和 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 public static void main(String[] args) throws IOException     {         int n;         String s;         BufferedReader buf;         buf=new BufferedReader(new In

为什么求模运算要用素数(质数)

好的HASH函数需要把原始数据均匀地分布到HASH数组里 原始数据不大会是真正的随机的,可能有某些规律, 比如大部分是偶数,这时候如果HASH数组容量是偶数,容易使原始数据HASH后不会均匀分布.比如 2 4 6 8 10 12这6个数,如果对 6 取余 得到 2 4 0 2 4 0 只会得到3种HASH值,冲突会很多如果对 7 取余 得到 2 4 6 1 3 5 得到6种HASH值,没有冲突 同样地,如果数据都是3的倍数,而HASH数组容量是3的倍数,HASH后也容易有冲突用一个质数则会减少冲

杭电 4707 pet(并查集求元素大于k的集合)

Description One day, Lin Ji wake up in the morning and found that his pethamster escaped. He searched in the room but didn’t find the hamster. He tried to use some cheese to trap the hamster. He put the cheese trap in his room and waited for three da

HDU 4417 Super Mario(划分树问题求不大于k的数有多少)

Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3625    Accepted Submission(s): 1660 Problem Description Mario is world-famous plumber. His “burly” figure and amazing jumping ability

ZOJ 1562 More Divisors 反素数

最裸的反素数问题.求不大于N的数约数最多的数是多少,如果有多个求最小值. 设x的约数个数为g(x),如果有某个正整数a有对于任意0<i<a有g(i)<g(a),则称a为反素数. g(x)的计算方法,先分解质因子x=a^b*c^d*e^f- g(x)=(b+1)*(d+1)*(f+1),即指数+1的乘积 反素数有性质: 一个反素数的质因子必然是从2开始的连续质数 2^t1*3^t2*5^t3*7^t4.....必然有t1>=t2>=t3>=.... 有了这些性质之后,就可

因数最多的数

样例输入 3 10 100 1000 样例输出 6 60 840 题解: 比如24= 23x 3,它的因数个数有(3 + 1)*(1 +1)=8个. 本题我们只要枚举每个质数的次数即可,用DFS来寻找答案.前15个质数之积已经大于1016,所以我们枚举这15个质数就足够了. 注意第i个质数的次数一定大于第i + 1个质数的次数.因为我们是求最小的那个因数最多的数,如果大质数的次数大于小质数的次数,那交换双方次数,因数个数不会变,但是数会减小. 利用这一点,可以把每次枚举的范围缩小.还有一些剪枝,

求n以内的质数(质数的定义:在大于1的自然数中,除了1和它本身意外,无法被其他自然数整除的数)

思路: 1.(质数筛选定理)n不能够被不大于根号n的任何质数整除,则n是一个质数2.除了2的偶数都不是质数代码如下: /** * 求n内的质数 * @param int $n * @return array */ function get_prime($n) { $prime = array(2);//2为质数 for ($i = 3; $i <= $n; $i += 2) {//偶数不是质数,步长可以加大 $sqrt = intval(sqrt($i));//求根号n for ($j = 3;