zoukankan      html  css  js  c++  java
  • 蓝桥杯最大最小公倍数

      昨日刷题时碰到这题,发现自己的数学功底实在是差,也不知道3个月的刷题是否能将自己的水平拔高到一定水准,时间真是一个宝贵的东西。以下为题目:

        题目看完我的想法是这样的,从n开始遍历,判断是否互质,如果两两互质,那么用这3个数的乘积作为结果,代码如下,以下代码得了60分,并不正确:

     1 #include<stdio.h>
     2 #include<math.h>
     3 int f(int x,int y)
     4 {
     5     int i,j,min,max,flag=1;
     6     min=x>y?y:x;
     7     max=x<y?y:x;
     8     for(i=2;i<=sqrt(min);i++)
     9     {
    10         if(x%i==0&&y%i==0)
    11         {
    12             flag=0;
    13             break;
    14         }
    15     }
    16     if(flag&&max%min!=0)
    17         return 1;
    18     else 
    19         return 0;
    20 }
    21 int main(int argc, char *argv[])
    22 {
    23     long long x,i,j,k,n;
    24     scanf("%d",&n);
    25     if(n<5)
    26     {
    27         if(n==1)
    28             printf("1");
    29         else
    30             printf("%d",n*(n-1));
    31         return 0;
    32     }
    33     for(i=n;i>0;i--)
    34         for(j=n-1;j>0;j--)
    35             for(k=n-2;k>0;k--)
    36                 if(f(i,j)&&f(i,k)&&f(j,k))
    37                     {
    38                         x=i*j*k;
    39                         printf("%I64d",x);
    40                         return 0;
    41                     }
    42 }

    其中函数f是用来判断两数是否互质。

      在发现自己的代码并不正确之后,百度之。发现自己真的是too young too simple,sometimes naive!

      以下为思考后的总结:a,b这2个数的公因子只可能是<=abs(a-b);假设c为a,b的公因子,如果c>abs(a-b),那么min(a,b)=kc,因为(k+1)c>max(a,b),所以不存在公因子c>abs(a-b)。回到题目本身:如果n为奇数,那么n,n-1互质;n-1,n-2互质;n,n-2因为都是奇数,所以公因子2不成立,互质;当n为奇数时,最大最小公倍数为n(n-1)(n-2);当n为偶数时有2种情况:1、n%3!=0,最大最小公倍数为n(n-1)(n-3);2、n%3==0,最大最小公倍数为(n-1)(n-2)(n-3)。代码如下:

     1 #include<stdio.h>
     2 int main(int argc, char *argv[])
     3 {
     4     long long n,x;
     5     scanf("%I64d",&n);
     6     if (n<=2)
     7         x=n;
     8     else if(n%2)
     9         x=n*(n-1)*(n-2);
    10     else
    11     {    
    12         if(n%3)
    13             x=n*(n-1)*(n-3);
    14         else
    15             x=(n-1)*(n-2)*(n-3);
    16     }
    17     printf("%I64d",x);
    18     return 0;
    19 }

    以上代码已过蓝桥杯测评系统。

  • 相关阅读:
    Linux 忘记root密码
    Linux 基础命令
    Linux 运行级别
    Oracle 体系结构
    Oracle 数据库启动过程
    数据库设计范式
    Oracle通过ROWID删除表中重复记录
    JACASCRIPT--的奇技技巧的44招
    css 的小细节,小总结
    关于我们DOM的知识点
  • 原文地址:https://www.cnblogs.com/search-the-universe/p/search-the-universe-test1.html
Copyright © 2011-2022 走看看