2 条题解

  • -1
    @ 2025-10-5 16:41:24

    题意

    x=i=1npiai(piprime)x=\prod_{i=1}^{n} p_i ^{a_i} (p_i \in prime) fx=i=1n(ai+1)f_x=\prod_{i=1}^n(a_i+1) gx=ixfig_x=\sum_{i|x}f_i

    gxg_x 为多少

    推导式子

    xx 唯一分解定理展开的,然后乘法原理就可以推出来 fxf_x 的式子,对于 fxf_x 每一种情况的组合再进行一遍唯一分解定理,就可以推出来 gxg_x ,因为 n1017n\le 10^{17} 所以对于 n\ge \sqrt n 的数字我们可以直接跳出循环,因为剩下的一定只有一个 n\ge \sqrt n 的一次的数,式子:

    $$g_x=\prod_{i=1}^{n}\sum_{j=1}^{p_i+1}=\sum_{i=1}^{n}(\frac{(p_i+1)\times(p_i+2)}{2}) $$

    然后这个题就可以写了(

  • -1
    @ 2025-2-20 12:29:32

    我们设p[i]指x第i小的质数的次数 根据乘法原理和加法原理,每一个质数都有p[i]+1种选法g(i)=i=1nj=1p[i]+1g(i)=\prod_{i = 1}^{n}\sum_{j = 1}^{p[i]+1} 化简一下可得g(i)=i=1n(p[i]+1)(p[i]+2)/2g(i) =\prod_{i = 1}^{n}(p[i]+1)*(p[i]+2)/2 p[i]可以用质因数分解做出 然后这个题就做完了 code:

    #include <bits/stdc++.h>
    using namespace std;
    
    vector<long long> p;
    
    long long x;
    
    void read(){
    	cin >> x;
    	return ;
    }
    
    void compute(){
    	for(long long i = 2;i * i <= x; i++){
    		long long cnt = 0;
    		if(x % i != 0) continue;
    		while(x % i == 0){
    			cnt++;
    			x /= i;
    		}
    		p.push_back(cnt);
    	}
    	if(x > 1) p.push_back(1ll);
    	long long ans = 1;
    	for(long long i = 0;i < p.size(); i++){
    		ans *= (p[i] + 2) * (p[i] + 1) / 2;
    	}
    	cout << ans;
    	return ;
    }
    
    int main(){
    	read();
    	compute();
    	return 0;
    }
    
    • @ 2025-2-20 12:34:03

      注意力是一种可持久化的能力%%%

  • 1

信息

ID
6
时间
2000ms
内存
256MiB
难度
8
标签
(无)
递交数
150
已通过
20
上传者