求N個數的階乘相乘素因子個數總和
阿新 • • 發佈:2018-12-19
#include <bits/stdc++.h> using namespace std; bool vis[10000004]; vector<long long>prim; long long maxprim[10000004];//最大素因子 long long num[10000004]; int main() { memset(vis, 0, sizeof(vis)); memset(num, 0, sizeof(num)); memset(maxprim, 0, sizeof(maxprim)); for (int i = 2; i <= 10000000; ++i) { if (!vis[i]) { prim.push_back(i); maxprim[i] = i; } for (int j = 0; j < prim.size(); ++j) { if (i * prim[j] > 10000000)break; vis[i * prim[j]] = 1; maxprim[i * prim[j]] = prim[j]; if (i % prim[j] == 0)break; } } long long n; long long maxi = 0; long long x; long long sum = 0; scanf("%lld", &n); for (int i = 0; i < n; ++i) { scanf("%lld", &x); sum += x; num[x]++; maxi = max(maxi, x); } for (int i = maxi; i >= 2; --i) { num[i] += num[i + 1]; } for (int i = maxi; i >= 2; --i) { if (vis[i]) { num[maxprim[i]] += num[i]; num[i / maxprim[i]] += num[i]; } } }