约数个数--数学模板

点击跳转例题

一个数分解质因数之后,如果要求出其中某个约数,那么就是这些质因子选与不选,选几个来组合的问题。所以有多少种选法就是简单的乘法原理。
核心代码

unordered_mapmp;
for(int i=2;i<=x/i;i++)
        {
            while(x%i==0)
                mp[i]++,x/=i;
        }
        if(x>1)
            mp[x]++;

例题代码:
 

#include 
#define int long long //(有超时风险)
#define PII pair
#define endl '\n'
#define LL __int128

using namespace std;

const int N=2e5+10,M=1e3+10,mod=998244353,INF=0x3f3f3f3f;

int a[N],b[N],c[N],pre[N];

signed main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int n;cin>>n;
    unordered_mapmp;
    while(n--)
    {
        int x;cin>>x;
        for(int i=2;i<=x/i;i++)
        {
            while(x%i==0)
                mp[i]++,x/=i;
        }
        if(x>1)
            mp[x]++;
    }
    int res=1;
    for(auto i:mp)
        res=res*(i.second+1);
    cout<

你可能感兴趣的:(数学,算法,c++,数据结构,职场和发展)