约数个数和约数之和

约数个数和约数之和推导:

约数个数代码实现:

求n个数的乘积的约数个数:

#include<iostream>
#include<unordered_map>
using namespace std;
#define int long long
const int p=1e9+7;
unordered_map<int,int>mp;
void divide(int x){
    for(int i=2;i<=x/i;i++){
        while(x%i==0){
            x/=i;
            mp[i]++;
        }
    }
    if(x>1)mp[x]++;
}
signed main(){
    int t;
    cin>>t;
    int res=1;
    while(t--){
        int x;
        cin>>x;
        divide(x);
    }
    for(auto t:mp)res=res*(t.second+1)%p;
    cout<<res<<endl;
    return 0;
}

约数之和代码实现:

求n个数相乘的约数之和:

#include<iostream>
#include<unordered_map>
using namespace std;
#define int long long
const int p=1e9+7;
unordered_map<int,int>mp;
void divide(int x){
    for(int i=2;i<=x/i;i++){
        while(x%i==0){
            x/=i;
            mp[i]++;
        }
    }
    if(x>1)mp[x]++;
}
signed main(){
    int t;
    cin>>t;
    int res=1;
    while(t--){
        int x;
        cin>>x;
        divide(x);
    }
    for(auto t:mp){
        int k=t.second;
        int temp=1;
        while(k--)temp=(temp*t.first+1)%p;
        res=res*temp%p;
    }
    cout<<res<<endl;
    return 0;
}

N!分解质因数和(N!)^2的约数个数推导

将N!分解质因数代码实现:

#include<iostream>
using namespace std;
const int N=1e6+5;
int prime[N],vis[N],cnt;
void init(int n){
	for(int i=2;i<=n;i++){
		if(!vis[i])prime[cnt++]=i;
		for(int j=0;prime[j]*i<=n;j++){
			vis[prime[j]*i]=1;
			if(i%prime[j]==0)break;
		}
	}
}
int main(){
	int n;
	cin>>n;
	init(n);
	for(int i=0;i<cnt;i++){
		int count=0;
		for(int j=n;j;j/=prime[i])count+=j/prime[i];
		cout<<prime[i]<<" "<<count<<endl;
	}
	return 0;
}

求解(N!)^2的约数个数代码实现:

#include<iostream>
using namespace std;
const int N=1e6+5,p=1e9+7;
int prime[N],vis[N],cnt;
void init(int n){
	for(int i=2;i<=n;i++){
		if(!vis[i])prime[cnt++]=i;
		for(int j=0;prime[j]*i<=n;j++){
			vis[prime[j]*i]=1;
			if(i%prime[j]==0)break;
		}
	}
}
int main(){
	int n;
	cin>>n;
	init(n);
	int res=1;
	for(int i=0;i<cnt;i++){
		int count=0;
		for(int j=n;j;j/=prime[i])count+=j/prime[i];
		res=res*(count*2+1)%p;
	}
	cout<<res<<endl;
	return 0;
}

 

posted @ 2023-04-29 23:59  回忆、少年  阅读(10)  评论(0编辑  收藏  举报