zoukankan      html  css  js  c++  java
  • 【bzoj 3309 】 DZY Loves Math

    Description

    对于正整数n,定义f(n)为n所含质因子的最大幂指数。例如f(1960)=f(2^3 * 5^1 * 7^2)=3, f(10007)=1, f(1)=0。
    给定正整数a,b,求sigma(sigma(f(gcd(i,j)))) (i=1..a, j=1..b)。

    Input

    第一行一个数T,表示询问数。
    接下来T行,每行两个数a,b,表示一个询问。

    Output

    对于每一个询问,输出一行一个非负整数作为回答。

    Sample Input

    4
    7558588 9653114
    6514903 4451211
    7425644 1189442
    6335198 4957

    Sample Output

    35793453939901
    14225956593420
    4332838845846
    15400094813

    HINT

    【数据规模】

    T<=10000

    1<=a,b<=10^7

    题解:

      O(≧口≦)O,不想写了……打一次数学公式半个多小时2333

      贴一发题解:http://www.cnblogs.com/xkui/p/4598596.html

    #include<cstdio>
    using namespace std;
    typedef long long ll;
    inline ll min(ll a,ll b){return a<b?a:b;}
    const ll mod=(ll)1e9+7;
    const int N=(int)1e7+1;
    ll n,m,k;
    int prime[N];int num;
    bool vis[N];
    ll g[N];
    int last[N],t[N];
    void init(){
        for(int i=2;i<N;i++){
            if(!vis[i]){
                prime[++num]=i;
                last[i]=t[i]=1;
                g[i]=1;
            }
            for(int j=1;i*prime[j]<N&&j<=num;j++){
                int x=i*prime[j];
                vis[x]=1;
                if(i%prime[j]==0){
                    last[x]=last[i];
                    t[x]=t[i]+1;
                    if(last[x]==1)
                        g[x]=1;
                    else 
                        g[x]=(t[last[x]]==t[x]?-g[last[x]]:0);
                    break;
                }
                last[x]=i;
                t[x]=1;
                g[x]=(t[i]==1?-g[i]:0);
            }
        }
        for(int i=2;i<N;i++)
            g[i]+=g[i-1];
    }
    inline ll solve(){
        ll ans=0;
        if(m<n) n^=m^=n^=m;
        ll last;
        for(ll i=1;i<=n;i=last+1){
            last=min(n/(n/i),m/(m/i));
            ans+=(n/i)*(m/i)*(g[last]-g[i-1]);
        }
        return ans;
    }
    int main(){
        int T;
        scanf("%ld",&T);
        init();
        while(T--){
            scanf("%lld%lld",&n,&m);
            ll ans=solve();
            printf("%lld
    ",ans);
        }
    }
  • 相关阅读:
    边学边收 代码
    VS2013无法链接到TFS (转)
    使用Spring MVC创建 REST API
    zookeeper的概念和基础
    使用Spring的HttpInvoker
    使用远程服务
    Spring MVC起步
    使用注解创建切面
    通过切点来选择连接点
    Spring实战之切面编程
  • 原文地址:https://www.cnblogs.com/Troywar/p/7354275.html
Copyright © 2011-2022 走看看