zoukankan      html  css  js  c++  java
  • 反素数解析

    反素数的定义:

     对于任何正整数,其约数个数记为,例如,如果某个正整数满足:对任意的正整

       数,都有,那么称为反素数。

    或者:             

        一个[1,n]的连续区间, 约数相同的最小数x,x是反素数。例如:f(6) = 4,f(8) = 4,6是约数为4切最小的数,所以6是约数。

    反素数性质:

    1. 反素数肯定是从2开始的连续素数的幂次形式的乘积。
    2. 数值小的素数的幂次大于等于数值大的素数,即n = p_{1}^{k_{1}}*p_{2}^{k_{2}}*p_{3}^{k_{3}}*...*p_{n-1}^{k_{n-1}}*p_{n}^{k_{n}}中,有k_{1}geq k_{2}geq k_{3}geq ...geq k_{n}

    性质的解析:

      根据 反素数定义:

      对于性质二: (5^6)*(7^2)*(11^7) > (5^7)*(7^6)*(11^2)

      对于性质一:(5^7)*(7^6)*(11^2) > (2^7)*(3^6)*(5^2)

    例题:反素数模板题

    我们先求出这个区间最多由几个素数相乘,即n = p_{1}^{k_{1}}*p_{2}^{k_{2}}*p_{3}^{k_{3}}*...*p_{n-1}^{k_{n-1}}*p_{n}^{k_{n}},(k1 = k2  = k3 = ... = kn , kn = 1)

    我们再求出这个区间的最大数最多是最小素数的几次幂。 2e9 < 2^30。

     1 #include <iostream>
     2 #include <cstdio>
     3 #define ll long long
     4 
     5 using namespace std; 
     6 
     7 int p[] = {2,3,5,7,11,13,17,19,23,29};
     8 int Max,ans,n;
     9  
    10 // inx 素数下标  v当前数值  cnt 约数个数  pw之前的幂次
    11 void dfs(int inx, int v, int cnt, int pw){
    12 
    13     for(int i = 1; i <= pw; ++i){
    14         if((ll)v * p[inx] > (ll)n){
    15             if(Max < cnt * i){
    16                 Max = cnt * i;
    17                 ans = v;
    18                 
    19             }else if(cnt * i == Max) ans = min(ans, v);
    20             break;
    21         }
    22         else dfs(inx + 1, v *= p[inx], cnt * (i + 1), i);
    23 
    24     }
    25 }
    26  
    27  
    28 int main(){
    29 
    30     while(~scanf("%d", &n)){
    31         Max = 1;
    32         dfs(0, 1, 1, 30);   
    33         printf("%d
    ", ans);
    34     }
    35 
    36     return 0;
    37 }
    38  
  • 相关阅读:
    全文本搜索神器
    唯一索引和普通索引怎么选择
    程序员应不应该搞全栈
    c 的陷阱
    抽象能力
    电影电视剧推荐
    系统故障诊断
    一次web网站被入侵的处理记录
    Spark RDD 操作
    (转)Mysql哪些字段适合建立索引
  • 原文地址:https://www.cnblogs.com/SSummerZzz/p/12567526.html
Copyright © 2011-2022 走看看