反素数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反素数相关的知识,希望对你有一定的参考价值。

素数的约数只有1和本身, 而反素数是约数尽可能多, 多到,比它小的数, 约数就不会比它多。、

性质

反素数的通式:
p=2^t1 * 3^t2 * 5^t3 * 7^t4 .....( t1>=t2 >= t3 >= ....)
尽可能多就表现在

  1. 质因子是从最小的2开始的连续的质数
  2. 小的质因子比大的质因子的数目更多

通式如上的约数个数为 ( t1 + 1) ( t2 +1 ) ( t3 + 1 ) *........

由此可见 t1, t2....的数目越多越好。

问题提出

把一个数的约数个数定义为该数的复杂程度,给出一个n,求1-n中复杂程度最高的那个数。如果有多个数复杂度相等,输出最小的。

基本思路

由于所求的数拥有的小质因数尽可能多, 我们需要遍历尽可能多的小质因数的情况, 在深度搜索大质因数的尽可能多的情况, 没有必要不断判断 t1, t2, t3之间的关系。用 maxsum 记录最大的约数个数即可。

辅助数组:
const int prime[16]= {1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47};

伪码:
typedef long long ll;
getantiprime( 1, 1, 1, );

getantiprime( ll num,  ll k,  ll sum ){
        if( sum > maxsum )
                    maxsum  =  sum ; 
        for( int i=1 ;   ;  i++ ){
                    num *=  prime[ k ];   
                    getantiprime( num,  k+1,  sum*(i+1) ); 
      }
}

以上是关于反素数的主要内容,如果未能解决你的问题,请参考以下文章

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

BZOJ1053: [HAOI2007]反素数ant

Luogu P1463 [HAOI2007]反素数ant:数学 + dfs反素数

反素数

反素数和素数表

hdu 2521 反素数(打表)