zoukankan      html  css  js  c++  java
  • Comet OJ

    题意:

     思路:

           首先我们打表观察得到,f(x)为 x分解质因数之后 ∏pi^(ti/2) 

        再分析可得,∑f(i)=n/(1*1)*1*只为1的个数+n/(2*2)*2*只为2的个数+... 

           但是结果超时。

                在进行分析可得,只为x的个数 就是phi(x)。

    #include<bits/stdc++.h>
    #define rep(i,a,b) for(int i=a;i<=b;i++)
    #define dep(i,a,b) for(int i=b;i>=a;i--)
    using namespace std;
    #define ll long long
    const int N=3e5+5;
    ll rd()
    {
        ll x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int T;
    ll n;
    ll f[10000010],ans,sum;
    int main()
    {
        T=rd();
        while(T--)
        {
            ans=0;sum=0;
            n=rd();
            int p=sqrt(n);
            dep(i,2,p)
            {
                int x=i+i;
                f[i]=n/(1ll*i*i);
                while(x<=p)
                {    
                    f[i]-=f[x];
                    x+=i;
                }
                ans=ans+1ll*f[i]*i;
                sum+=f[i];
            }
            printf("%lld
    ",ans+n-sum); 
        }
    }
    View Code
    #include<bits/stdc++.h>
    #define rep(i,a,b) for(int i=a;i<=b;i++)
    #define dep(i,a,b) for(int i=b;i>=a;i--)
    using namespace std;
    #define ll long long
    const int N=1e7+5;
    ll rd()
    {
        ll x=0,f=1;char ch=getchar();
        while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int prime[N+10],phi[N+10],num[N+10],flag[N+10],l=0;
    void isprime()
    {
        phi[1]=1;
        for(int i=2;i<=N;i++)
        {
            if(!flag[i]) 
            {
                prime[++l]=i;
                phi[i]=i-1; 
            }
            for(int j=1;j<=l;j++)
            {
                if(1ll*prime[j]*i>N) break;
                phi[i*prime[j]]=phi[i]*(i%prime[j]?prime[j]-1:prime[j]);
                flag[prime[j]*i]=1;
                if(i%prime[j]==0) break;
            }
        }
    }
    int T;
    ll n;
    ll f[10000010],ans,sum;
    int main()
    {
        isprime();
        T=rd();
        while(T--)
        {
            ans=0;sum=0;
            n=rd();
            int p=sqrt(n);
            dep(i,1,p)
            {
                int x=i+i;
                f[i]=n/(1ll*i*i);
                ans=ans+1ll*f[i]*phi[i];
            }
            printf("%lld
    ",ans); 
        }
    }
    View Code
  • 相关阅读:
    有关于iphone 音频 录制 播发
    iPhone开发之网络编程 AsyncSocket
    在.NET中使用Speex 音频数据编解码
    下面首先来看GCD的使用
    [已解决] AVAudioRecorder 录音,编码问题
    [转](让你少走十年弯路)四十以后才明白
    怎样才算读懂一本书?
    5000个知识点后怎样?
    DIKW体系 个人知识管理领域中最基础的概念
    个人竞争力 每个人必须悟透的概念
  • 原文地址:https://www.cnblogs.com/The-Pines-of-Star/p/11334828.html
Copyright © 2011-2022 走看看