最大的奇约数
来源:互联网 发布:js随时检测窗口大小 编辑:程序博客网 时间:2024/05/01 18:27
小易是一个数论爱好者,并且对于一个数的奇数约数十分感兴趣。一天小易遇到这样一个问题: 定义函数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,需要求出 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感觉更多的是在玩数字游戏啊
import java.util.Scanner;public class Main6 {public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int n = scanner.nextInt(); System.out.println(sumOfMaxOdd(n)); } } /* * 奇数的最大约数就是本身。问题就是求所有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 sumOfMaxOdd(long n) { if (n == 1) { return 1; } if (n % 2 == 0) { return sumOfMaxOdd(n / 2) + n * n / 4; } else { return sumOfMaxOdd(n - 1) + n; } }}
0 0
- 最大的奇约数
- 最大的奇约数
- 最大的奇约数
- 最大的奇约数
- 最大的奇约数
- 最大的奇约数和
- 网易笔试题:最大的奇约数
- [编程题] 最大的奇约数
- [编程题] 最大的奇约数
- 【算法题】最大的奇约数
- 网易笔试题:最大的奇约数
- 网易编程题--最大的奇约数
- [编程题] 最大的奇约数
- 【PHP】求最大奇约数的和
- [编程题]最大的奇约数
- 最大奇约数
- 最大奇约数
- 最大奇约数
- C#事件
- nohup和&的区别
- 欢迎使用CSDN-markdown编辑器
- Oracle自连接,外连接举例
- 简易邮箱验证
- 最大的奇约数
- Android Studio Error:Could not find com.android.tools.build:gradle
- Log4J日志配置详解
- 信号signal()、alarm()、信号集函数、sigprocmask()
- 关于SimpleDateFormat安全的时间格式化线程安全问题
- Integer的自动拆箱和自动装箱的陷阱(整型数-128到127的值比较问题)
- 指针(一)
- (HDU 1259) 最少拦截系统 dp || 贪心
- javascript 普通对象和集合类的操作学习笔记