藍橋杯練習系統—演算法訓練 最小最大公倍數

來源:互聯網
上載者:User

標籤:out   post   輸出   main   描述   代碼   輸入格式   存在   space   

問題描述
已知一個正整數N,問從1~N中任選出三個數,他們的最小公倍數最大可以為多少。

輸入格式
輸入一個正整數N。

輸出格式
輸出一個整數,表示你找到的最小公倍數。
範例輸入
9
範例輸出
504
資料規模與約定
1 <= N <= 106。

分析:

   這個題的意思就是在1~N的範圍內找三個數,使他們的最小公倍數在這個範圍內的組合是最大的。       

       接下來先說一個結論:大於1的兩個相鄰的自然數必定互質。

       而對於1~N的範圍,肯定是 n*(n-1)*(n-2)的乘積最大、如果這三個數還兩兩互質的話那就最棒了。

       如果n是奇數,那麼 n、n-1、n-2必定兩兩互質,要是有些糾結的話,那麼我們就分析在什麼情況下可能會存在公因子。n是奇數,那麼n,n-1,n-2一定是兩奇加一偶的情況。公因子2直接pass,因為只有一個偶數。假設剩下的n,n-2中有一個數能被3整除,那麼有公因子的數一定是n或n-2加減3才能得到的情況。為此,n,n-1,n-2的乘積不僅是最大的,而且一定兩兩互質。

       如果n是偶數,繼續分析n*(n-1)*(n-2),這樣的話n和n-2必定有公因子2,那麼就換成式子n*(n-1)*(n-3)。然後仔細思考一下,不行啊,若偶數本身就能被3整除的話,那麼式子n*(n-1)*(n-3)也不成立了,n和n-3就有公因子3,再仔細思考一下,式子就變成了(n-1)*(n-2)*(n-3),兩奇夾一偶的情況。

代碼

#include<iostream>  using namespace std;  int main() {      long long n, ans;      while(cin >> n) {          if(n <= 2) {              ans = n;          }           else if(n % 2) {              ans = n * (n - 1) * (n - 2);          }          else {              if(n%3) ans = n * (n-1) * (n-3);              else ans=(n-1) * (n-2) * (n-3);          }          cout << ans << endl;      }      return 0;  }   

 

藍橋杯練習系統—演算法訓練 最小最大公倍數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.