nyoj 517 最小公倍數

來源:互聯網
上載者:User

標籤:

最小公倍數
時間限制:1000 ms | 記憶體限制:65535 KB
難度:3
描述
為什麼1小時有60分鐘,而不是100分鐘呢?這是曆史上的習慣導致。
但也並非純粹的偶然:60是個優秀的數字,它的因子比較多。
事實上,它是1至6的每個數位倍數。即1,2,3,4,5,6都是可以除盡60。

我們希望尋找到能除盡1至n的的每個數位最小整數m.
輸入
多組測試資料(少於500組)。
每行只有一個數n(1<=n<=100).
輸出
輸出相應的m。
範例輸入
2
3
4
範例輸出
2
6
12

可以發現,1到n的最小公倍數,是1到n-1的最小公倍數乘以n的所有素因子中沒有被1到n-1包含的素因子。

例如:1到7的最小公倍數是2*3*2*5*7,8=2*2*2,(8中2出現3次,1到7的素因子中只出現2次)那麼1到8就是2*3*2*5*7*2

#include <iostream>#include <string.h>//memset函數的標頭檔 using namespace std;#define M 105#define MAX 1000int main() {    int a[M],i,j;    int b[1000];    for(i=1; i<M; i++)        a[i]=i;    /*因為當前數可能是以後數的因子,則把當前數以後的數的因子去掉,剩餘的數相乘就好啦*/    for(i=2; i<M; i++) {        for(j=i+1; j<M; j++) {            if(a[j]%a[i]==0) {                a[j]=a[j]/a[i];            }        }    }    int n;    int c;//餘數    int s;    while(cin>>n) {//      memset(b,0,1000*sizeof(int));        memset(b,0,sizeof(b));        b[0]=1;//將b[1]-b[n]中所有數相乘起來就是最小公倍數        for(i=2; i<=n; i++) {            //乘以a[i]            c=0;            for(j=0; j<MAX; j++) {                s=b[j]*a[i]+c;                b[j]=s%10;                c=s/10;            }        }        //輸出        for(j=MAX-1; j>=0; j--)  //忽略前置0            if(b[j])                break;        for(i=j; i>=0; i--)            cout<<b[i];        cout<<endl;    }    return 0;}

nyoj 517 最小公倍數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.