题解 | #最大的奇约数#

最大的奇约数

https://www.nowcoder.com/practice/49cb3d0b28954deca7565b8db92c5296

奇数最大奇约数是本身,偶数最大奇约数是除以所有偶因子后的那个奇数

所以当计算num的最大的奇约数之和可以转换为

  • 1.计算所有奇数的最大奇约数之和+所有偶数的最大奇约数之和
  • 2.所有偶数的最大奇约数之和可以转换为/2之后,计算所有奇数的最大奇约数之和+所有偶数的最大奇约数之和
  • 3.循环第二步,直到num为0

例: 计算num=10的最大的奇约数之和

  • 1.计算(1 3 5 7 9)的最大奇约数之和等于25 加上 (2 4 6 8 10)的最大奇约数之和
  • 2.(2 4 6 8 10)的最大奇约数之和可以转换为 计算(1 2 3 4 5) 的最大奇约数之和
  • 3.(1 2 3 4 5)的最大奇约数之和可以转换为计算 (1 3 5)的最大奇约数之和等于9 + (2 4)的最大奇约数之和
  • 4.(2 4)的最大奇约数之和可以转换为计算 (1 2)的最大奇约数之和 指导所有偶数都转换为奇数之后计算结束
unsigned long long GetAllMaxOddNumberOddApproximateSum(int num) { // 获取所有奇数的最大奇约数之和
	unsigned long long sum = 0;
	for (int i = 1; i <= num; i+=2) {
		sum += i;
	}
	return sum;
}

unsigned long long GetAllMaxOddApproximateSum2(int input) {
	unsigned long long sum = 0;
	while (input) {
		sum += GetAllMaxOddNumberOddApproximateSum(input);
		input = input / 2; // 计算/2后所有的奇数的和 说明这些值不能再除2了(因为偶数最大奇约数是除以所有偶因子后的那个奇数) 循环到input为0
	}
	return sum;
}
全部评论

相关推荐

买蜜雪也用卷:我觉得应该没有哪个人敢说自己熟练使用git,代码分支一复杂还是得慢慢寻思一下的,不过基本的拉代码提交代码还有分支什么的是应该会
点赞 评论 收藏
分享
Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务