2.最大的奇约数-2017网易秋招

思路:类似数学证明题
链接:https://www.nowcoder.com/questionTerminal/49cb3d0b28954deca7565b8db92c5296
来源:牛客网
/*
* 奇数的最大约数就是本身。问题就是求所有f(i), i为偶数的和 因为要求的是最大奇约数,所以f(2k) = f(k),所以f(
2
) + f(
4
)
* + ... + f(2k) = f(
1
) + f(
2
) + ... + f(k);
*
* sum(n) = sum (n /
2
) +
1
+
3
+ ... + n -
1
= sum (n/
2
) + n*n/
4
(n 为偶数)
*
* = sum (n -
1
) + n (n为奇数)
*
*
*/
1 import java.util.Scanner; 2 3 public class Main{ 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 Scanner scanner = new Scanner(System.in); 8 while (scanner.hasNext()) { 9 int n = scanner.nextInt(); 10 System.out.println(sumOfMaxOdd(n)); 11 } 12 } 13 14 /* 15 * 奇数的最大约数就是本身。问题就是求所有f(i), i为偶数的和 因为要求的是最大奇约数,所以f(2k) = f(k),所以f(2) + f(4) 16 * + ... + f(2k) = f(1) + f(2) + ... + f(k); 17 * 18 * sum(n) = sum (n / 2) + 1 + 3 + ... + n - 1 = sum (n/2) + n*n/4(n 为偶数) 19 * 20 * = sum (n - 1) + n (n为奇数) 21 * 22 * 23 */ 24 public static long sumOfMaxOdd(long n) { 25 if (n == 1) { 26 return 1; 27 } 28 if (n % 2 == 0) { 29 return sumOfMaxOdd(n / 2) + n * n / 4; 30 } else { 31 return sumOfMaxOdd(n - 1) + n; 32 } 33 } 34 35 }
分类:
算法题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)