想了个题,好像挺典的,是否有原
  • 板块学术版
  • 楼主kimi123
  • 当前回复11
  • 已保存回复11
  • 发布时间2024/10/17 14:57
  • 上次更新2024/10/17 18:24:57
查看原帖
想了个题,好像挺典的,是否有原
570957
kimi123楼主2024/10/17 14:57

将一个正整数n拆分成一些数,即a1+a2+a3+......+ak=na_1+a_2+a_3+......+a_k=n

求所有的乘积值个数 (即所有不重复的a1a2....aka_1*a_2*....*a_k值的个数)

此题是否有原?我想到的是一个O(n2/ln(n))O{(n^2/ln(n))}的dp做法

代码贴下(

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2e4+7,mod=1e9+7;
ll f[N];
bool vis[N];
int a[N];
int tot=0;
int main(){	
	int n; cin>>n;
	a[++tot]=1;
	for(int i=2;i<=n;i++){
		if(vis[i]==0) a[++tot]=i; 
		for(int j=2*i;j<=n;j+=i) vis[j]=1;
	}
	f[0]=1;
	for(int i=1;i<=tot;i++){
		for(int j=0;j<=n;j++){
			if(j-a[i]>=0){
				f[j]+=f[j-a[i]];
				f[j]%=mod;
			}
		}
	}
	cout<<f[n]%mod;
	return 0;
}
2024/10/17 14:57
加载中...