image

约数个数

#include<iostream>
#include<unordered_map>
const int MOD=1e9+7;
using namespace std;
int n;

int main(){
    unordered_map<int,int>mp;
    cin>>n;
    while(n--){
        int x;
        cin>>x;
        for(int i=2;i<=x/i;i++){
            while(x%i==0){
                x/=i;
                mp[i]++;
            }
        }
        if(x>1)mp[x]++;
    }
    long long ans=1;
    for(auto [x,y]:mp){
        ans=ans*(y+1)%MOD;
    }
    cout<<ans<<endl;
    return 0;
}

###约数之和

#include<iostream>
#include<unordered_map>
const int MOD=1e9+7;
using namespace std;
int n;
unordered_map<int,int> mp;
long long ans=1;
int main(){
    cin>>n;
    while(n--){
       int x;
       cin>>x;
       for(int i=2;i<=x/i;i++){
           while(x%i==0){
               x/=i;
               mp[i]++;
           }
       }
       if(x>1)mp[x]++;
    }
    for(auto [k,v]:mp){
        long long t=1;
        while(v--)t=(t*k+1)%MOD;
        ans=ans*t%MOD;
    }
    cout<<ans<<endl;
    
    return 0;
}