1. 程式人生 > >LOJ 6165. 一道水題 (線性篩)

LOJ 6165. 一道水題 (線性篩)

題目描述

傳送門

題目大意:求出能整除[1,n]中所有數的最小整數,對100000007取模。

題解

實際上就是求[1,n]中所有數的最小公倍數,最小公倍數等於pimax(qi)
即所有質因子最大冪次的乘積。
剛開始覺得108的線性篩不能過,然而LOJ的評測機比較快,所有直接做就可以了

程式碼

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 100000003
#define MX 10000
#define LL long long 
#define p 100000007
using namespace std; bool pd[N]; int n,prime[6000000]; int main() { scanf("%d",&n); LL ans=1; for (int i=2;i<=n;i++) { if (!pd[i]) { prime[++prime[0]]=i; LL t=i; while (t*(LL)i<=n) t*=i; ans=ans*t%p; } for (int j=1;j<=prime[0
];j++) { int k=i*prime[j]; if (k>n) break; pd[k]=1; if (i%prime[j]==0) break; } } printf("%lld\n",ans); }