zoukankan      html  css  js  c++  java
  • NYOJ 939最小公倍数

    /**
    *    求LCM(1,2,3,...n)
    **/
    
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    #define N 100000010
    
    unsigned int prime[6000000], p[6000000], T, num;
    unsigned int flag[3126000];
    
    void slove(int n) {
        unsigned int res = 1;
        int i, t1, t2;
        for(i = 0; i <= num && prime[i] * prime[i] <= n; ++i) {
            t1 = prime[i];
            t2 = prime[i] * prime[i];
            while(t2 / t1 == prime[i] && t2 <= n)
            {
                t1 *= prime[i];
                t2 *= prime[i];
            }
            res *= (t1 / prime[i]);
        }
        int t = upper_bound(prime, prime+num, n) - prime - 1;
        res *= p[t];
        printf("%u
    ", res);
    }
    
    //生成素数
    void initPrime() {
        int i, j;
        p[num=0] = prime[0] = 2;
        for(i = 3; i < N; i += 2) {
            if( !(flag[i/32]&(1<<(i%32))) ) {
                prime[++num] = i;
                p[num] = i * p[num-1];
                for(j = i * 3; j < N; j += i * 2)
                    flag[j/32] |= 1<<(j%32);
            }
        }
    }
    
    int main() {
        initPrime();
        prime[++num] = 100000003;
        scanf("%d", &T);; int i, n;
        for(i = 0; i < T; ++i) {
            scanf("%d", &n);
            slove(n);
        }
        return 0;
    }
    
  • 相关阅读:
    POJ 2386 Lake Counting
    POJ 1852 Ants
    HDU 4570 Multi-bit Trie
    HDU 4611 Balls Rearrangement
    ZOJ 3551 Bloodsucker
    HEU 百题解1001 谁是中间的那个
    BNU 1001 北师大ACM新手指导/ICPC introduction(1)
    BOJ 1580 Shoot
    BOJ 1578 Maximum
    BOJ 1577 Easy Game
  • 原文地址:https://www.cnblogs.com/yaling/p/3572290.html
Copyright © 2011-2022 走看看