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 }
复制代码

 

posted @   草莓小甜心  阅读(37)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示