题目
小葱同学喜欢吃糖,小葱买了很多糖。但是小葱买的糖太多了,小葱记不清具体数字了,小葱只记得自己的总糖数是自己记录在笔记本上的N个数a1,a2,⋯,aN的最小公倍数。请你帮帮小葱,算算小葱买了多少糖。
对于100% 的数据,1≤N≤103,1≤ai≤109。
题解
提炼一下题意——求n个数的最小公倍数
直接分解质因数,然后求出每个质因子的最大次幂是多少,乘起来即可
(第一次在考场上A题,不过是道签到题QAQ)
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| #include<bits/stdc++.h> #define int long long using namespace std;
map <long long, long long>s;
const int N = 1e3 + 10; int a[N], n; const int mod = 1e9 + 7; int read() { int f = 1, x = 0; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); }
while(ch >= '0' && ch <= '9') { x = 10 * x + ch - '0'; ch = getchar(); } return f * x; }
int fast_power(int a, int p) { int ans = 1; while(p) { if(p & 1) ans = ans * a % mod; a = a * a % mod; p >>= 1; } return ans % mod; }
signed main() { freopen("buy.in", "r", stdin); freopen("buy.out", "w", stdout); int ans = 1; n = read(); for(int i = 1;i <= n;i++) a[i] = read(); int temp; for(int i = 1;i <= n;i++) { temp = a[i]; for(int j = 2;j <= temp / j;j++) { int c = 0; while(temp % j == 0) {
c++; temp /= j; if(c > s[j]) { ans = (ans * j) % mod; s[j]++; } }
} if(temp > 1) {
if(s[temp] == 0) { s[temp] = 1;
ans = ans * temp % mod; } } } printf("%lld", ans % mod); return 0; }
|