• 51nod 1434


    首先可以得出一个性质:LCM(1,2,3,4,...,N-1,N) 中质因子k的出现的次数为t,则有k^t<=n

    根据这个性质我们先筛出素数,然后枚举每个质数,求出对应的k和t,然后找出倍数j(不会很大)

    ,使得j*k^t>n,这个j*k^t是ans的可能取值,所以ans = max(ans, j*k^t)不断更新最大的ans,

    这样可以保证尽量小的m使得LCM(N+1,N+2,....,M-1,M)中存在j*k^t把LCM(1,2,3,4,...,N-1,N)中k^t除尽

    #include <bits/stdc++.h>
    using  namespace  std;
    
    template<class T> T sqr(T x) {
        return x * x;
    }
    template<class T> T gcd(T a, T b) {
        return b ? gcd(b, a%b) : a;
    }
    template<class T> void read(T&num) {
        char CH;
        bool F=false;
        for(CH=getchar(); CH<'0'||CH>'9'; F= CH=='-',CH=getchar());
        for(num=0; CH>='0'&&CH<='9'; num=num*10+CH-'0',CH=getchar());
        F && (num=-num);
    }
    
    const int N=1e6+10;
    
    int n;
    int prime[N];
    
    void init() {
        for(int i = 2; i * i < N; i++)if(!prime[i]) {
                for(int j = 2 * i; j < N; j += i)prime[j] = 1;
            }
    }
    
    int  main() {
        int T;
        read(T);
        init();
        while(T--) {
            read(n);
            int ans = 2, num;
            for(int i = 2; i <= n; i++)if(!prime[i]) { //素数
                    int u = (int)(log(n) / log(i));
                    int v = (int)pow(i, u);
                    for (int j = 2; ; ++j)if (v * j > n) {
                            v *= j;
                            break;
                        }
                    ans = max(ans, v);
                }
            printf("%d
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    WSL+vscode安装rust注意事项
    几种判断质数的算法
    select被遮挡问题
    idea工具使用
    docker部署nexus服务
    docker部署nacos
    springcloudAlibaba整合nacos
    Navicat_Premium_v15 激活
    CF295D Solution
    CF351B Solution
  • 原文地址:https://www.cnblogs.com/shandongs1/p/9564446.html
Copyright © 2020-2023  润新知