简单问题,蒟蒻求助
  • 板块学术版
  • 楼主_xEr_
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/7/18 11:17
  • 上次更新2023/11/3 09:10:36
查看原帖
简单问题,蒟蒻求助
672815
_xEr_楼主2023/7/18 11:17

rt 最近发现不知道分解数咋写了,写了个记忆化却有一个问题不能突破。

比如20可以分解成:
2∗1
2∗2∗5
4∗5
1∗20
我的代码如下

int dfs(int a,int l){
	//cout<<a<<' '<<l<<' '<<s[a]<<endl;
	if(s[a]==0)return f[a]=1;//素数筛
	if(f[a])return f[a];
	int sum=1;
	for(int i=l+(l==1);i<=a-1;i++){
		if(a%i==0){
			sum*=dfs(a/i,i);
		}
	}
	return f[a]=++sum;
}

这个代码会因为 10 有 1x10 和 2x5 两张情况而把 2x10 时的情况记作 2 个 (2x2x5 , 2x1x10) , 4 因为有 1x4 2x2 两种情况,4x5 时也会记作两个(2x2x5 ,1x4x5),而 2x2x5 出现了两次,导致答案出错,忘了之前是怎么解决的,在这里问问大家 orz

2023/7/18 11:17
加载中...