AcWing 870. 约数个数(唯一分解+组合数)

Posted MangataTS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 870. 约数个数(唯一分解+组合数)相关的知识,希望对你有一定的参考价值。

题目链接

https://www.acwing.com/problem/content/872/

思路

我们将每一个数进行一个唯一分解后,对于每一个质因子我们统计一下数量,假设我们已经记录到了每一个质因子的数量 v i s [ x ] vis[x] vis[x]那么我们选择的情况就是从 0 0 0 v i s [ x ] vis[x] vis[x]也就是 v i s [ x ] + 1 vis[x]+1 vis[x]+1的选择方法,我们将所有的方法数乘起来

代码

#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007

map<int,int> vis;
int n,a;
void slove()
    for(int i = 2;i * i <= a; ++i) 
        while(a % i == 0) vis[i]++,a /= i;
    
    if(a-1) vis[a]++;


int main()

    scanf("%d",&n);
    for(int i = 1;i <= n; ++i) 
        scanf("%d",&a);
        slove();
    
    long long ans = 1LL;
    for(auto it : vis)  ans = (ans * (it.second + 1)) % mod;
    printf("%lld\\n",ans);
    
    return 0;

以上是关于AcWing 870. 约数个数(唯一分解+组合数)的主要内容,如果未能解决你的问题,请参考以下文章

算法AcWing 870. 约数个数

(寒假练习 AcWing 870)约数个数(数论)

870. 约数个数

poj2992 divisors 求组合数的约数个数,阶乘的质因数分解

UVA294DIvisors(唯一分解定理+约数个数)

COGS 693. [SDOI2005]Antiprime数 唯一分解定理逆用