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 }

浙公网安备 33010602011771号