Luogu P4626 一道水題 II

2022-04-30 19:12:11 字數 1212 閱讀 2574

---恢復內容開始---

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

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

szb:什麼題?

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

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

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

輸入格式:

一行乙個數 n。

輸出格式:

一行乙個數 ans。

n <= 1e8

真是**,1e8的資料

題目分析難度不大,很容易想到是求1~n的最小公倍數,但要求效率較高。

以1~7舉例:

for(int i = 1;i <= 7;i++)

我用pri[i]表示i的質因數集合,ans表示ans是由哪些數相乘得到的。

i = 1時,不管

i = 2時,pri[2] = 2,ans = 1,所以ans *= 2

i = 3時,pri[3] = 3,ans = 1,2,所以ans *= 3

i = 4時,pri[4] = 2,2,ans = 1,2,3,此時ans裡有乙個i了,要成為4的最小公倍數只需要*2就可以了,ans = 1,2,2,3

列舉質數,int now = 1;while(質數*now <= n) 質數*now。

#include#include

#include

#include

using

namespace

std;

const

int maxn = 1e8 + 5

;const

int maxm = 5761460

;const

int p = 100000007

;int

n,cnt;

long

long

ans;

intprime[maxm];

bool

notprime[maxn];

inline

void prime_sieve(int

n) }

}int

main()

printf(

"%lld\n

",ans%p);

return0;

}

LUOGU P4626 一道水題 II

傳送門 通過手 y 推 y 可知,其實就是要求每個質數的冪次方小於等於n,將這個質數的冪次方累積到答案一定是最優的,然後發現10000的平方 1e8,所以在篩質數的時候就將10000以上的先乘到答案裡。register卡常過得。include include include include incl...

LUOGU P4626 一道水題 II

傳送門 通過手 y 推 y 可知,其實就是要求每個質數的冪次方小於等於n,將這個質數的冪次方累積到答案一定是最優的,然後發現10000的平方 1e8,所以在篩質數的時候就將10000以上的先乘到答案裡。register卡常過得。include include include include incl...

洛谷P4626 一道水題 II

題目大意 求 lcm 1,2,3,cdots,n pmod n leqslant10 8 題解 先線性篩出質數,然後求每個質數最多出現的次數,可以用 log in 來求,i 為該質數。使用換底公式 log in dfrac 卡點 模數是 10 8 7 看成 10 9 7 c code include...