美文网首页
最大的奇约数

最大的奇约数

作者: dasdadf | 来源:发表于2017-09-25 13:29 被阅读0次

题目

小易是一个数论爱好者,并且对于一个数的奇数约数十分感兴趣。一天小易遇到这样一个问题: 定义函数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


代码

1.0 之什么都不想

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Ming Jia
# @Date:   2017-02-09 22:53:51
# @Last Modified by:   Ming Jia
# @Last Modified time: 2017-09-24 01:21:28
from __future__ import print_function


def msn(n, list_name):
    """
    Calculate the maximum singular number(最大奇约数) of n.

    :param n: The number you want to deal with.
    :param list_name: A list contain all of the msn from 1 to n-1.
    :return The msn of n.
    """
    if n % 2 == 1:
        return n
    else:
        return list_name[n / 2 - 1]


if __name__ == '__main__':
    n = 7
    number_list = []
    for i in range(n):
        number_list.append(msn(i + 1, number_list))
    print(sum(number_list))

n = 7时输出21,没毛病。
but ~ 敲 ~ 黑 ~ 版

输入一个整数N (1 ≤ N ≤ 1000000000)

速度没问题~内存却~
输入最大的值,果断内存爆掉~

2.0 考虑内存占用

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author: Ming Jia
# @Date:   2017-02-09 22:53:51
# @Last Modified by:   Ming
# @Last Modified time: 2017-09-25 09:29:56
from __future__ import print_function


def msn(n):
    """
    Calculate the maximum singular number(最大奇约数) of n.

    :param n: The number you want to deal with.
    :return The msn of n.
    """
    tail = 0
    number = n / 2
    if n % 2 == 1:
        tail = n
    else:
        tail = 0
    i = 1
    result = 0
    while i <= number:
        result += i**2
        i += 1

    result += tail
    return result


if __name__ == '__main__':
    n = 1000000000
    print(msn(n))

将从1到n的数分为奇数和偶数,奇数的msn是本身,偶数的除以2后,继续分为奇数和偶数~~
1 = 12
1 + 3 = 22
……
1 + 3 + 5 + 7 + 9 = 52
所以结果就是这样~

相关文章

  • 最大的奇约数

    题目 小易是一个数论爱好者,并且对于一个数的奇数约数十分感兴趣。一天小易遇到这样一个问题: 定义函数f(x)为x最...

  • 最大公约数

    最大公约数 自然数d同时是a,b的约数,称d是a和b的公约数,d是a和b的公约数中最大的一个,d就是最大公约数,记...

  • 最大公约数与最小公倍数(Java)

    最大公约数[1] ①定义 几个自然数公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数。 ...

  • 算法笔记(7)| 数学问题(1)

    1.最大公约数与最小公倍数 1.最大公约数 最大公约数是指正整数a和b中都能够除尽的最大的数。解决最大公约数是方法...

  • 最大公约数

    最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。 想求两个数找最大公约数是什么?...

  • 1071.字符串的最大公因子

    解题思路 定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。最大公约数(Greatest ...

  • 最大公约数

    一、辗转相除法1,循环除 2,迭代除 扩展:a,b最小公倍数=(ab最大公约数^2)a/最大公约数b/最大公约数=...

  • 最大公约数和最小公倍数

    最大公约数 一般用gcd(a,b)来表示a和b的最大公约数,而求解最大公约数常用欧几里得算法(即辗转相除法) 如果...

  • 常用的简单函数 ——求最大公约数的函数

    当计算多个数的公约数时,需要知道,前两个的最大公约数,依次和后面的数求公约数,得到的就是所有数字的最大公约数。

  • 辗转相除法求最大公约数原理

    最大公约数 最小公倍数// A*B= 最大公约数 * 最小公倍数

网友评论

      本文标题:最大的奇约数

      本文链接:https://www.haomeiwen.com/subject/ekghextx.html