- 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; }
K - Simple question-唯一分解定理-
猜你喜欢
转载自blog.csdn.net/BePosit/article/details/84332657
今日推荐
周排行