求1~n的lcm
阿新 • • 發佈:2018-12-02
題意很簡單,但資料量巨大,出題人給了4s.利用唯一分解定理和1-n數字因子的特點去解決。
詳見程式碼,很容易理解。、
#include <iostream> #include<algorithm> #include<stdio.h> #include<map> #include<iomanip> #include<string.h> #define ll long long #define inf 0x3f3f3f3f #define mod 100000007 using namespace std; bool isprime[100000005]; int ans[10000005]; int prime[10000005],top; void check() { for(int i=2; i<100000005; i++) { if(isprime[i]==0) prime[top++]=i; for(int j=0; j<top&&prime[j]*i<100000005; j++) { isprime[i*prime[j]]=1; if(i%prime[j]==0) break; } } } ll n; int main() { check(); while(~scanf("%lld",&n)) { ll sum=1; for(int i=0; i<top; i++) { ll tt=n; if(prime[i]>n) break; while(tt>=prime[i]) { tt/=prime[i]; sum*=prime[i]; sum%=mod; } } printf("%lld\n",sum); } return 0; }