소스 검색

一个数的因子数为质数分解后的指数加一的乘积。一个数m进行质数分解后为p0^a01*p1^a1*...*Pj^aj,那么m的因子数为(a0+1)*(a1+1)*...*(aj+1)。由此可知,n!的因子数即为每一项1、2、...、n的质数分解后指数的合并。所以只要统计1-n的每一项的质数分解,然后将相同质数的指数加起来再加一,求积即为结果。

jal 5 년 전
부모
커밋
ee59b33ea0
1개의 변경된 파일36개의 추가작업 그리고 0개의 파일을 삭제
  1. 36 0
      G.cpp

+ 36 - 0
G.cpp

@@ -0,0 +1,36 @@
+//
+// Created by jal on 2019-04-01.
+#include <bits/stdc++.h>
+using namespace std;
+vector<int>prime;
+void init(int n){
+    vector<bool>f(n+1, true);
+    for(int i = 2; i <= n; i++){
+        if(f[i]){
+            prime.push_back(i);
+        }
+        for(int j = 0; j < prime.size() && i * prime[j] <= n; j++){
+            f[i * prime[j]] = false;
+        }
+    }
+}
+int main(){
+    int n;
+    cin >> n;
+    init(n);
+    long long ret = 1;
+    map<int, int>mp;
+    for(int i = 2; i <= n; i++){
+        int t = i;
+        for(int j = 0; j < prime.size(); j++){
+            while(t % prime[j] == 0){
+                mp[prime[j]]++;
+                t /= prime[j];
+            }
+        }
+    }
+    for(auto i : mp){
+        ret *= (i.second + 1);
+    }
+    cout << ret << endl;
+}