zoukankan      html  css  js  c++  java
  • LCM from 1 to n

    https://cn.vjudge.net/problem/LightOJ-1289

    题意

      计算出1到n的数的最小公倍数

    题解

      我们知道一个数必定能分解成一些质数相乘,而一些数的lcm = 他们分解成的质数取最高次幂x再相乘。列如4和6分解为(2^2)和2*3,那么lcm = (2^2)*3 = 12。所以我们这道题其实就是找有多少质数在n的范围内并乘上它们在范围内的最高次幂。但是因为1e8的数据所以我们在晒质数时对数字的标记要用到bitset。并且预先处理出质数的前缀乘使得我们二分找完1次幂的数,那么for一遍2次幂的就将原来for到1e8降为了sqrt(1e8)了(其实也可以一直二分找)。

    #include <iostream>
    #include <cstring>
    #include <string>
    #include <algorithm>
    #include <cmath>
    #include <cstdio>
    #include <queue>
    #include <stack>
    #include <map>
    #include <bitset>
    #define ull unsigned long long
    #define ll long long
    #define met(a, b) memset(a, b, sizeof(a))
    #define lowbit(x) (x&(-x))
    #define MID (l + r) / 2
    
    using namespace std;
    
    const ll mod = (1ll << 32);
    const int inf = 0x3f3f3f3f;
    const ll INF = 0x3f3f3f3f3f3f3f3f;
    const int maxn = 6e6 + 7;
    
    bitset<(int)(1e8 + 5)> vis;
    
    int prime[maxn], ans;
    unsigned int presum[maxn];
    
    void num(int n) {
        ans = 0;
        for(int i = 2; i <= n; i++) {
            if(!vis[i]) prime[ans++] = i;
            for(int j = 0; j < ans && i*prime[j] <= n; j++) {
                vis[i*prime[j]] = 1;
                if(i % prime[j] == 0) break;
            }
        }
        presum[0] = prime[0];
        for(int i = 1; i < ans; i++) presum[i] = presum[i-1]*prime[i];
    }
    
    int main() {
        num((int)(1e8 + 3));
        int T, k = 0;
        scanf("%d", &T);
        while(T--) {
            int n;
            scanf("%d", &n);
            int pos = upper_bound(prime, prime + ans, n) - prime - 1;
            unsigned int res = presum[pos];
            for(int i = 0; i < ans && prime[i]*prime[i] <= n; i++) {
                ll t = 1;
                while(t*prime[i] <= n) t *= prime[i];
                res *= t/prime[i];
            }
            printf("Case %d: %u
    ", ++k, res);
        }
        return 0;
    }
  • 相关阅读:
    Python中的类(上)
    Django REST Framework API Guide 07
    Django REST Framework API Guide 06
    Django REST Framework API Guide 05
    Django REST Framework API Guide 04
    Django REST Framework API Guide 03
    Django REST Framework API Guide 02
    Django REST Framework API Guide 01
    Django 详解 信号Signal
    Django 详解 中间件Middleware
  • 原文地址:https://www.cnblogs.com/Ruby-Z/p/11349657.html
Copyright © 2011-2022 走看看