当前位置: 首页 > 知识库问答 >
问题:

如何编写代码,将偶数除以最大的奇数

公孙河
2023-03-14

我有一组数字要核对。如果数字是偶数,程序将检查最大的奇数分频器相等。例如,如果数字是12,程序将返回类似[3,3,3,3]的数组,或者对于36,它将是[9,9,9,9],对于54,[27,27]和56,[7,7,7,7,7,7,7]等等。我正在用ruby写我的代码。我不知道如何写出正确的算法。任何帮助都将不胜感激。

共有2个答案

邴越彬
2023-03-14

您可以分两步完成:

确定数字可被二整除的次数(假设 in 为正数) - 在伪代码中:

int divisors(int in):
    int divisor = 1
    for(; in % 2 == 0; divisor *= 2)
        in /= 2   //integer division!!!

    return divisor

除数将返回2的最大幂,中的可以被整除。这个想法是任何数字n都可以用它的素分解来表示,类似于:

n = 2^a * 3^b * 5^c * ...

我们只需要知道a,因为分解的其余部分必然是我们的最大奇数除数。或者更详细地说:

n = 2^a * 3^b * 5^c * ...
largest_odd_divisor = 3^b * 5^c * ...
largest_even_divisor = 2^a = divisors(n)

我们找不到任何更大的奇数除数,因为我们只消除了n中的所有偶数除数,所以我们只得到了可以添加到largest_odd_divisor中的偶数除数,但正因为如此,除数将变为偶数。

其余的都是微不足道的:
Geta(如上所示),创建一个大小为2^a的数组并将其填充为n/(2^a)

邹俊友
2023-03-14

试试这个

def fun(num)
  odd = num
  odd /= 2 while odd.even?
  [odd] * (num / odd)
end

这是如何工作的?

这会将数字除以 2,直到它是奇数。

 类似资料:
  • 我已经用google的nacl编译器编译了一些Qt代码,但是ncval验证器不能运行它。许多例子中的一个: 以下是相关代码: 编译为: 在49b检查调用指令:这是验证器无法理解的。到底是什么会导致编译器发出一条调用自身中间的指令?有办法解决这个问题吗?我用-g-O0-fno-inline编译过。编译器错误?

  • 本文向大家介绍编写Golang程序以使用位运算查找奇数和偶数,包括了编写Golang程序以使用位运算查找奇数和偶数的使用技巧和注意事项,需要的朋友参考一下 例子 输入num = 5 => 101&1 = 001 => True,即Odd;否则num将是偶数。 解决这个问题的方法 步骤1: 定义一个接受数字的方法。 第2步:使用该编号执行和操作。 步骤3:如果&运算符返回非零值,则该数字将为奇数。

  • 我试图在Spring Boot项目中使用最新(主)版本的Betamax,我得到了错误<code>SLF4J:检测到log4j-over-SLF4J。jar和slf4j-log4j12.jar在类路径上,抢占StackOverflowerError。。 所以我看了这个问题的最上面的答案,它说通过这样做来排除冲突依赖: 但是我的项目使用 Gradle,所以我必须将其转换为 Gradle,我真的不知道我

  • 问题内容: 给定一个整数数组,您需要将数组中的奇数和偶数分开。 请注意:元素的顺序可以更改。 例如: 问题答案: 让我们说数组是 初始化两个索引变量, 和 增加左变量直到你得到奇数 递减右边的变量,直到你得到偶数。 如果 ,交换 和 最后,您会看到左侧有偶数,右侧有奇数。 用于分隔数组中奇数和偶数的 Java 代码: 当你运行上面的程序时,你会得到以下输出:

  • 二进制搜索的想法在排序数组的情况下完美地工作。我们可以对进行排序,对于每个值,搜索数组中是否存在另一个值。二进制搜索在中执行搜索,这可以帮助我们提高时间复杂度。 解决方案步骤 对数组按递增顺序排序对于每个元素,使用二分查找。如果数组A中存在值,则返回true。如果在整个数组中没有找到这样的对,则返回false。 伪代码"' ''' 这个伪代码只针对一个数组,如果我想检查两个未排序的数组中的对,以及

  • 是否可以重写以下内容,使其不包含任何条件语句?我想使用按位运算之类的东西可能会有一些聪明的技巧? 编辑:澄清一下,我不是在寻找一种去除条件句的通用方法。我正在寻找一个技巧,从这个非常具体的代码中删除条件。把它当成一个学术难题。 举个例子,删除条件(在某些情况下会产生性能增益)的一种方法是预先计算一个查找表,然后用< code>b索引。在这种特殊情况下,这很棘手,因为< code>b可能是一个非常大