• AOJ 739 First Blood


    First Blood
    Time Limit: 1000 ms   Memory Limit: 64 MB
    Total Submission: 152   Submission Accepted: 37
     
    Description
    盖伦是个小学一年级的学生,在一次数学课的时候,老师给他们出了一个难题:
    老师给了一个正整数 n,需要在不大于n的范围内选择三个正整数(可以是相同的),使它们三个的最小公倍数尽可能的大。盖伦很想第一个解决这个问题,你能帮助盖伦拿到“first blood”吗?
    Input
    首先是一个正整数T,表示有T组测试数据
    每组测试数据是一个正整数n(1<=n<=10^6)
    Output
    对于每组测试数据,输出最大的最小公倍数,每个输出单独占一行
    Sample Input

    2 9 7
    Sample Output

    504 210
    Source
    安徽省2015年“京胜杯”大学生程序设计竞赛

     
    简单题解(方法一):
    • 本题可用暴力搜索法解决
    • 必须细心剪枝,否则会超时
     1 #include<iostream>
     2 using namespace std;
     3 
     4 long long gcd(long long a,long long b)
     5 {
     6     if(b==0)
     7         return a;
     8     return gcd(b,a%b);
     9  } 
    10  
    11  long long lcm(long long a,long long b)
    12  {
    13      return a/gcd(a,b)*b;
    14  }
    15  
    16  
    17 int main()
    18 {
    19     int t;
    20     cin>>t;
    21     while(t--)
    22     {
    23         long long n;
    24         long long x,i,j,k,max=0;
    25         cin>>n;
    26         for(i=n;i>0;i--)
    27         {
    28             if(i*i*i<max)
    29                 break;
    30             for(j=n;j>0;j--)
    31             {
    32                 if(i*j*j<max)
    33                     break;
    34                 for(k=n;k>0;k--)
    35                 {
    36                     if(i*j*k<max)
    37                         break;
    38                     x=lcm(i,lcm(j,k));
    39                     if(x>max)
    40                         max=x;
    41                 }
    42             }
    43         }
    44         cout<<max<<endl;
    45     }
    46     return 0;
    47 }
    简单题解(方法二):
    •   找规律
    •   如果n为奇数,则结果是n*(n-1)*(n-2)
    •   如果n为偶数,此时n与n-2不互质,则大部分情况的结果是n*(n-1)*(n-3),但是还有例外(n=6,12,18,24...等数时,n与n-3不是互质的)此时结果为(n-1)*(n-2)*(n-3)
    •   还应注意n<3的情况
     1 #include<iostream>
     2 using namespace std;
     3 
     4 long long gcd(long long a,long long b)
     5 {
     6     if(b==0)
     7         return a;
     8     return gcd(b,a%b);
     9  } 
    10 
    11 bool isrp(long long m,long long n)
    12 {
    13     if(gcd(m,n)>1)
    14         return 0;
    15     else return 1;
    16 }
    17 
    18 long long lcm(long long a)
    19 {
    20     if(a%2==0)
    21     {
    22         if(!isrp(a,a-3))
    23             return lcm(a-1);
    24         else
    25             return a*(a-1)*(a-3);
    26     }
    27     else
    28         return a*(a-1)*(a-2);
    29 }
    30 
    31 int main()
    32 {
    33     int t;
    34     cin>>t;
    35     while(t--)
    36     {
    37         long long n;
    38         cin>>n;
    39         if(n==1)
    40             cout<<1<<endl;
    41         else if(n==2)
    42             cout<<2<<endl;
    43         else 
    44             cout<<lcm(n)<<endl;
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    内置函数——filter和map
    递归函数
    内置函数和匿名函数
    迭代器和生成器
    装饰器函数
    函数进阶
    COGS 2533. [HZOI 2016]小鱼之美
    COGS 2532. [HZOI 2016]树之美 树形dp
    COGS2531. [HZOI 2016]函数的美 打表+欧拉函数
    bzoj1303: [CQOI2009]中位数图
  • 原文地址:https://www.cnblogs.com/wixy/p/5496738.html
Copyright © 2020-2023  润新知