网易笔试题:最大的奇约数
生活随笔
收集整理的這篇文章主要介紹了
网易笔试题:最大的奇约数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
小易是一個數論愛好者,并且對于一個數的奇數約數十分感興趣。一天小易遇到這樣一個問題: 定義函數f(x)為x最大的奇數約數,x為正整數。 例如:f(44) = 11.
現在給出一個N,需要求出 f(1) + f(2) + f(3)…….f(N)
例如: N = 7
f(1) + f(2) + f(3) + f(4) + f(5) + f(6) + f(7) = 1 + 1 + 3 + 1 + 5 + 3 + 7 = 21
小易計算這個問題遇到了困難,需要你來設計一個算法幫助他。
輸入描述:
輸入一個整數N (1 ≤ N ≤ 1000000000)
輸出描述:
輸出一個整數,即為f(1) + f(2) + f(3)…….f(N)
輸入例子:
7
輸出例子:
21
求解思路:
* 奇數的最大約數就是本身。問題就是求所有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為奇數)*
public static Long sum(Long n){if(n==1){return 1L;
}if(n%2==0){return sum(n/2)+n*n/4;
}else {return sum(n-1)+n;
}}public static void main(String [] args){Scanner sc = new Scanner(System.in);
while(sc.hasNext()){System.out.println(sum(sc.nextLong()));
}}
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的网易笔试题:最大的奇约数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 序列化以及反序列化二叉树
- 下一篇: 蘑菇街2015校招 Java研发笔试题