2 条题解

  • 0
    @ 2025-10-8 17:05:40
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int N=40000;
    LL f[N+10], phi[N+10];
    int pr, prime[N];
    bool v[N+10];
    int main()
    {
        phi[1]=1;pr=0;
        memset(v, 0, sizeof(v));
        for(int i=2;i<=N;i++)
        {
            if(!v[i])phi[i]=i-1;prime[++pr]=i;
            for(int j=1;j<=pr && prime[j]*i<=N;j++)
            {
                v[i*prime[j]]=1;
                if(i%prime[j]==0) {phi[i*prime[j]]=phi[i]*prime[j];break;}
                else phi[i*prime[j]]=phi[i]*(prime[j]-1);
            }
        }
        f[1]=phi[1];for(int i=2;i<=N;i++)f[i]=f[i-1]+phi[i];
        int n;scanf("%d", &n);
        printf("%lld\n", f[n-1]*2+1);
        return 0;
    }
    
    • 0
      @ 2025-10-8 17:05:32
      #include<bits/stdc++.h>
      using namespace std;
      typedef long long LL;
      const int N=40000;
      LL f[N+10],phi[N+10];
      int pr,prime[N];
      bool v[N+10];
      int main()
      {
          phi[1]=1;pr=0;
          memset(v,0,sizeof(v));
          for(int i=2;i<=N;i++)
          {
          	if(!v[i])phi[i]=i-1,prime[++pr]=i;
          	for(int j=1;j<=pr && prime[j]*i<=N;j++)
          	{
          		v[i*prime[j]]=1;
      			if(i%prime[j]==0) {phi[i*prime[j]]=phi[i]*prime[j];break;}
      			else phi[i*prime[j]]=phi[i]*(prime[j]-1);
          	}
          }
          f[1]=phi[1];for(int i=2;i<=N;i++)f[i]=f[i-1]+phi[i];
          int n;scanf("%d",&n);
          printf("%lld\n",f[n-1]*2+1);
          return 0;
      }
      
      • 1

      *【线性筛:欧拉函数】仪仗队[SDOI2008]

      信息

      ID
      3855
      时间
      1000ms
      内存
      128MiB
      难度
      7
      标签
      递交数
      15
      已通过
      8
      上传者