zoukankan      html  css  js  c++  java
  • 反素数打表

    转自链接:https://www.cnblogs.com/12mango/p/7592925.html

    本数学渣渣终于也涉及到一些数论问题了QAQ

    反素数:

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

      反素数性质一:一个反素数的质因子必然是从2开始的连续的质数
      反素数性质二:N=p1^e1 * p2^e2 ...... pr^er,必然有e1>=e2>=... >=er,而一个数的因子数=(e1+1)*(e2+1)*(e3+1)...(er+1)


    下面是剪枝打表:
    /*
    36的因子
    1 2 3 4 6 9 12 18 36
    */
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    #define ll long long
    #define inf 1<<29
    int n,p[]={0,2,3,5,7,11,13,17,19,23,29,31},use[20];
    ll maxt,ans;//maxt是最大因子数,ans是当前的反质数
    //id是素数表的下标,now是当前数字,tot是因子数,符合因子数公式
    void dfs(ll id,ll now,ll tot){
        if(tot>maxt)//找到了因子数更大的数
            ans=now,maxt=tot;
        else if(tot==maxt && now<ans)//找到因子数相同,但是数值更小的数
            ans=now,maxt=tot;
        use[id]=0;
        while(now*p[id]<=n && use[id]+1<=use[id-1]){//第二个是剪枝
            use[id]++;
            now*=p[id];
            dfs(id+1,now,tot*(use[id]+1));
        }
    }
    int main(){
        scanf("%d",&n);
        use[0]=inf;
        dfs(1,1,1);
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    OSPF Configuration Examples
    enabling ip forwarding
    LeetCode 153. Find Minimum in Rotated Sorted Array
    洛谷 P1059 明明的随机数
    LeetCode 120. Triangle
    洛谷 P1047 校门外的树(待完善)
    C++万能头文件<bits/stdc++.h>的内容与优缺点
    LeetCode 217. Contains Duplicate
    LeetCode 414. Third Maximum Number
    洛谷 P1540 机器翻译
  • 原文地址:https://www.cnblogs.com/zsben991126/p/9885344.html
Copyright © 2011-2022 走看看