求一段連續自然數的最小公倍數

2021-08-30 06:58:09 字數 1384 閱讀 2139

本來是有個問題,如何在html中只使用乙個table(也就是不能巢狀table,不使用div)的情況下,乙個table有n行,每行的列數與對應的行的位置是相同的(也就是1行有1列,第2行有兩列,依次類推,第n行有n列),要求每行中的每列都平均分割顯示。

當時一下子沒有想起來,以為通過colspan加width可以實現,後來發現不對。只好用乙個相對愚蠢的方式,也就是算出1到n之間的最小公倍數,然後對於每行,在除以行數,就得出colspan的值,從而實現這個問題。比如說有6行,它們的最小公倍數是2*5*6也就是60,那麼第1行就是colspan=60, 第2行就是colspan=30, 第3行就是colspan=20,第4行就是colspan=15, 第5行就是colspan=12, 第6行就是colspan=10. 這樣也就可以實現上述問題,當然了,這種方法是在n不會太大的情況下,否則最小公倍數是會溢位的。

不過這個問題給我另外乙個思考,如果n未定,但有限(比如不會溢位),那麼如何比較快速有效地找到一系列連續自然數的最小公倍數?這種高效,本人希望是不僅對計算機而言,更對人而言。比如說通過數相乘然後除以下乙個自然數,模數為0的忽略,不為0的再累積乘的方式,對計算機而言是快速的,但是對人而言就是複雜的了(每次計算乙個大數除以乙個較小數都比較麻煩)。

雖然想到下面這個簡單的演算法,個人認為不算那麼高效(因為需要對合數進行分解)。

1. 對於每個數,如果是素數,則一定是最小公倍數的構成,參與計算。如果是合數,則分解成一組素數。

2. 對於每個素數,都有乙個類似map的結構(這種結構不僅僅是指語言的中map,而是類似的二維表),key為素數,value為素數出現的次數(可以是出現在自然數列中的,也可以是由合數分解出來的)。

3. 如果合數分解出的素陣列存在於map中(key=素數,value>=分解的素數次數),則該合數不參與計算中。

呵呵,有興趣的朋友可以討論討論,提提自己的想法。

----2009-10-27補充----

昨天吃完飯散步的時候,突然把三樓elmar的數學原理想通了,其實一點都不難。我們知道任何合數都可以分解成兩個或以上素數,因為合數本身是需要在連續數列範圍中,那麼分解出來的素數的乘積自然也必小於連續數列的最大邊界數,又可以知道,由最小素數的冪次方肯定是最小值(也就是a簡單表述下,就是:

1. 找出一段連續自然數列中的所有素數。

2. 迴圈這個有序的素數陣列,計算每個素數不大於自然數列中最大值的冪,然後累積相乘(這裡有個優化,當某個下標的素數的平方已經開始大於最大值時,改下標及其後續素數均不需要在進行重複檢查計算)

順便回到這個題目的最初原因,去構造這樣乙個**,如果準確的話,其實這個n是必須小於9的,也就是最多是8,如果n為9,其最小公倍數將超過1000(9和10,均為2520),這樣的colspan大部分瀏覽器不識別(包括ie, firefox, google chrome)。當然了,可以近似地完成後續(至少從介面上看不出太多差別)

求最小公倍數 關於對最小公倍數的規範思考

已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入乙個正整數n。輸出乙個整數,表示你找到的最小公倍數。9504 資料規模與約定 1 n 106。正確答案 求最小公倍數,要明確兩種特殊情況 includeusing namespace std int main int k...

C語言求兩數最小公倍數

求最小公倍數 方法一 給兩個數a,b,讓a和i相乘 i從1到b 每一次去模b,如果不等於0,然後i 1,直到等於0就找到了 include intmain printf d n a i return0 方法二 乙個數從a增加到a b,如果可以同時整數兩數,那麼就找到了 include intmain...

求多個數的最小公倍數

2011 07 21 10 39 49 分類 c 舉報 字型大小訂閱 令 a1,a2,an 表示a1,a2,an的最小公倍數,a1,a2,an 表示a1,a2,an的最大公約數,其中a1,a2,an為非負整數。對於兩個數a,b,有 a,b ab a,b 因此兩個數最小公倍數可以用其最大公約數計算。但...