K - Simple question-唯一分解定理-
阿新 • • 發佈:2018-11-25
- K - Simple question
- 題意:給定n,找到最小的能夠整除1-n中所有數的數字,取模1e9+7
- 思路:根據唯一分解定理,可知每個數可以唯一的分解為 一些素數的次冪的乘積,
- 由此唯一分解定理可知求解lcm的一種方法為,取這些數的分解中所有出現過的素數(取這個素數的以最高次冪出現的那個)
- 但是分解每個數也TLE,轉化一下直接素數篩出1-n的所有素數,對每個素數進行不斷乘以本身知道超過n停止,把不超過
- n的最大的那個 ,ans初始為1,ans累乘這些數
-
#include<bits/stdc++.h> using namespace std; #define ll long long #define maxn 110010111 bool vis[maxn]; int is[maxn],cnt,m=100000001; ll n,ans,t,mod=100000007; void prime() { memset(vis,0,sizeof(vis)); for(int i=2; i<=m; i++) { if(!vis[i]) is[++cnt]=i; for(int j=1; j<=cnt&&i*is[j]<=m; j++) { vis[i*is[j]]=1; if(i%is[j]==0)break; } } } int main() { prime(); while(~scanf("%lld",&n)) { ans=1; for(int i=1; i<=cnt&&is[i]<=n; i++) { t=n; t/=is[i]; while(t) { ans=is[i]*ans%mod; t/=is[i]; } } printf("%lld\n",ans); } return 0; }