zoukankan      html  css  js  c++  java
  • 2015多校第8场 HDU 5382 GCD?LCM! 数论公式推导

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5382

    题意:函数lcm(a,b):求两整数a,b的最小公倍数;函数gcd(a,b):求两整数a,b的最大公约数。函数[exp],其中exp是一个逻辑表达式。如果逻辑表达式exp是真,那么函数[exp]的值是1,否则函数[exp]的值是0。例如:[1+2>=3] = 1 ,[1+2>=4] = 0。

    求S(n)的值。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int maxn = 1e6+10;
    const int mod = 258280327;
    bool isprime[maxn];
    LL prime[maxn], primecnt, num[maxn];
    LL G[maxn], T[maxn], F[maxn], S[maxn];
    LL qsm(LL a, LL n){
        LL ret = 1;
        while(n){
            if(n&1) ret = ret*a%mod;
            a=a*a%mod;
            n>>=1;
        }
        return ret;
    }
    void pre_deal(){
        memset(isprime, true, sizeof(isprime));
        memset(num, 0, sizeof(num));
        for(int i=2; i<maxn; i++){
            if(isprime[i]){
                num[i]++;
                for(int j=i+i; j<maxn; j+=i){
                    isprime[j] = false;
                    num[j]++;
                }
            }
        }
        for(int i=2; i<maxn; i++){
            if(isprime[i]){
                prime[primecnt++]=i;
            }
        }
    }
    void INIT()
    {
        pre_deal();
        G[0] = 0;
        for(int i=1; i<maxn; i++){
            G[i] = qsm(2, num[i]);
        }
        memset(T, 0, sizeof(T));
        memset(F, 0, sizeof(F));
        memset(S, 0, sizeof(S));
        for(int i=1; i<maxn; i++){
            for(int j=i; j<maxn; j+=i){
                T[j]=(T[j]+G[j/i-1])%mod;
            }
        }
        F[1] = S[1] = 1;
        for(int i=2; i<maxn; i++){
            F[i] = ((F[i-1]+2*i-1+mod)%mod-(T[i-1]%mod)+mod)%mod;
            S[i] = (S[i-1] + F[i])%mod;
        }
    }
    int main()
    {
        INIT();
        LL n;
        int T;
        scanf("%d", &T);
        while(T--)
        {
            scanf("%lld", &n);
            printf("%lld
    ", S[n]);
        }
        return 0;
    }
    
  • 相关阅读:
    BZOJ 1597: [Usaco2008 Mar]土地购买
    BZOJ 1005: [HNOI2008]明明的烦恼
    BZOJ 1004: [HNOI2008]Cards
    Burnside引理和Polya定理
    BZOJ 1003: [ZJOI2006]物流运输
    BZOJ 1002: [FJOI2007]轮状病毒
    BZOJ 1001: [BeiJing2006]狼抓兔子
    网络流 最大流dinic算法解释
    51nod 1299 监狱逃离
    2017.11.26【清华集训2017】模拟
  • 原文地址:https://www.cnblogs.com/spfa/p/7326008.html
Copyright © 2011-2022 走看看