zoukankan      html  css  js  c++  java
  • 反素数(luogu 1463)

    题目描述

    对于任何正整数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的最大的反质数。

     

    输入输出样例

    输入样例
    1000
    输出样例
    840

    思路:

    找到反质数的规律,满足以下三个引理即可

    引理 1 :1 - N 中最大的反素数,就是1 - N中约数最多中最小的一个 .

    引理 2 :1 - N 中任何数的不同质因子都不会超过 10 个,且所有质因子总和不超过 30 .

    ( reason: 231>2*10)

    引理 3 : x 的质因子是连续的若干个最小的质数,并且指数单调递减

    都是很显然的结论(如果读懂了题意)

    code

    #include<stdio.h> 
    #include<algorithm>
    #define ll long long 
    using namespace std;
    int pri[15]={0,2,3,5,7,11,13,17,19,23,29};
    int mxn;
    ll n,s,ans;
    
    void dfs(ll m,int x,int k,int d) 
    {
        if((k>mxn) || (k==mxn && m<ans)) {
            ans=m,mxn=k;
        }
        int j=0,nk;
        ll i=m;
        while(j<d) {
            ++j;
            if(n/i<pri[x]) break;
            nk=k*(j+1);
            i=i*pri[x];
            if(i<=n) dfs(i,x+1,nk,j);
        }
        
    }
    
    int main() 
    {
        scanf("%lld",&n);
        dfs(1,1,1,11);
        printf("%lld",ans);
        return 0;
    }

     

  • 相关阅读:
    Qt进程间通信
    reinterpret
    vs调试技巧
    利用QSystemSemaphore和QSharedMemory实现进程间通讯
    QLocalSocket
    QShareMemory
    qt动态库实现无边框窗体的消息处理 nativeEvent的使用
    BCB6常用快捷键
    1219个人总结
    冲刺二 12.6
  • 原文地址:https://www.cnblogs.com/qseer/p/9780173.html
Copyright © 2011-2022 走看看