一道水題(最小公倍數簡單求法,線性篩法)

2021-10-09 00:06:33 字數 1439 閱讀 3949

描述

一天,szb 在上學的路上遇到了灰太狼。

灰太狼:幫我們做出這道題就放了你。

szb:什麼題?

灰太狼:求乙個能被 [1,n]內所有數整除的最小數字,並對 100000007 取模。

szb:這題太水了,就讓我小弟來做好了。

然後你就光榮的接受了這個任務。

輸入一行乙個數 n。

輸出一行乙個數 ans。

輸入樣例 1

10
輸出樣例 1

2520
提示

n≤10^8

題解:求756,4400,19845,9000的最小公倍數?

因756=2×2×3×3×3×7,4400=2×2×2×2×5×5×11,19845=3×3×3×3×5×7×7,9000=2×2×2×3×3×5×5×5,這裡有素數2,3,5,7,11.2最高為4次方16,3最高為4次方81,5最高為3次方125,7最高為2次方49,還有素數11.所以得最小公倍數為16811254911=87318000.

解法:「線性篩」 1 ~ 1e8 的素數,找出每個素數對應的最高次冪,最小公倍數=每個素數最高次冪的連乘。

下面附上ac**:

#include

using

namespace std;

typedef

long

long ll;

ll mod=

100000007

;const

int m=

100000000

;bool a[m+5]

;int b[

7000005];

int p=

0,n;

ll ans=1;

void

fun()}

for(

register

int j=

0; j<=m; j++)}

}int

main()

或者為:

#include

using

namespace std;

typedef

long

long ll;

const

int maxn =

100000004

;const

int mod =

1e8+7;

int n, cnt, p[

6200000];

bool vis[maxn]

;int

main

(void

)for

(int j =

0; j < cnt; j++)}

cout

}

希望對你有所幫助!

最小公倍數(水)

給定兩個正整數,計算這兩個數的最小公倍數。input 輸入包含多組測試資料,每組只有一行,包括兩個不大於1000的正整數.output 對於每個測試用例,給出這兩個數的最小公倍數,每個例項輸出一行。sample input 10 14 sample output 70 include using n...

成對最小公倍數 寫題筆記

你只需要複製下面的 並選擇正確的語言提交即可通過此題。int superlcm int n 給你乙個n,求superlcm n 的值。輸入以整數t t 200 開始,表示測試用例的數量。每種情況都從包含整數n 1 n 10 6 的一行開始。對於每個測試,每行列印函式superlcm int n 返回...

最大公約數最小公倍數,多個數求法和逆求法

多個數求法,求n個數的最大公約數和最小公倍數。求最大公約數函式 public static intdivisor int a,int b while a b 0 return b 求最小公倍數函式 public static intmultiple int a,int b public static...