---恢復內容開始---
一天,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...