zoukankan      html  css  js  c++  java
  • LightOJ 1370 Bi-shoe and Phi-shoe

     1 /*
     2  LightOJ 1370 Bi-shoe and Phi-shoe
     3  http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1370
     4  数论 欧拉函数
     5  坑点是答案会爆int!!!!
     6  */
     7 #include <cstdio>
     8 #include <algorithm>
     9 #include <cstring>
    10 #include <cmath>
    11 #include <vector>
    12 #include <queue>
    13 #include <iostream>
    14 #include <map>
    15 #include <set>
    16 //#define test
    17 using namespace std;
    18 const int Nmax=1e6+5e5;//Nmax一定要大于1e6否则会找不到答案
    19 int phi[Nmax];
    20 int prime[Nmax];
    21 int is_prime[Nmax];
    22 int prime_cnt;
    23 void get()
    24 {
    25     phi[1]=1;
    26     for(int i=2;i<Nmax;i++)
    27         is_prime[i]=1;
    28     for(long long i=2;i<Nmax;i++)
    29     {
    30         if(is_prime[i])
    31         {
    32             prime[++prime_cnt]=i;
    33             phi[i]=i-1;
    34         }
    35         for(int j=1;j<=prime_cnt;j++)
    36         {
    37             if(i*prime[j]>=Nmax)
    38                 break;
    39             is_prime[i*prime[j]]=0;
    40             if(i%prime[j]==0)
    41             {
    42                 phi[i*prime[j]]=phi[i]*prime[j];
    43                 break;
    44             }
    45             else
    46                 phi[i*prime[j]]=phi[i]*(prime[j]-1);
    47         }
    48     }
    49 }
    50 int main()
    51 {
    52     #ifdef test
    53     #endif
    54     get();    
    55     phi[1]=0;//此题要求phi[1]=0;
    56     //for(int i=1;i<Nmax;i++)
    57     //{
    58         //num[i].id=i;
    59         //num[i].val=phi[i];
    60     //}
    61     //sort(num+1,num+Nmax);
    62     //for(int i=1;i<=40;i++)
    63     //{
    64         //printf("phi[%d]:%d
    ",i,phi[i]);
    65     //}
    66     int t,n;
    67     scanf("%d",&t);
    68     for(int ttt=1;ttt<=t;ttt++)
    69     {
    70         scanf("%d",&n);
    71         long long ans=0LL;//此题一大坑点,ans会爆int
    72         int a;
    73         for(int i=1;i<=n;i++)
    74         {
    75             scanf("%d",&a);
    76             for(int j=a+1;j<Nmax;j++)//强力减枝!
    77             {
    78                 if(phi[j]>=a)
    79                 {
    80                     ans+=1LL*j;
    81                     break;
    82                 }
    83             }
    84         }
    85         printf("Case %d: %lld Xukha
    ",ttt,ans);
    86     }
    87     return 0;
    88 }
  • 相关阅读:
    STL堆实现
    Project Loom:Reactive模型和协程进行时(翻译)
    2020年最佳Java调试工具(翻译)
    布隆过滤器-使用场景的思考
    Logback,SLF4J,Log4J2。了解它们并学习如何使用。(翻译)
    使用Merkle树检测数据不一致(翻译)
    cassandra中的ACID,与RDBMS中的事务有何不同?
    Cassandra数据建模中最重要的事情:主键
    认证授权-学习笔记2-OpenId Connect
    jwt的思考
  • 原文地址:https://www.cnblogs.com/BBBob/p/6762566.html
Copyright © 2011-2022 走看看