【问题标题】:How do I factor integers using Perl?如何使用 Perl 分解整数?
【发布时间】:2009-07-27 12:01:09
【问题描述】:

我想将整数拆分为它们的因子。例如,如果记录总数为:

169 - ( 13 x 13 times) 
146 - ( 73 x 2 times) 
150 - ( 50 x 3 times)
175 - ( 25 x 7 times)
168 - ( 84 x 2 ) 
160 - ( 80 x 2 times) 

超过 10k 时 - 我想要 1000 上的所有内容 当它超过 100k 时 - 我想要 10k 上的所有内容

通过这种方式,我想分解数字。如何做到这一点?是否有任何 Perl 模块可用于这些类型的数字运算?

假设记录总数为 10k。它应该只拆分 1000x10 倍;不是 100 或 10 秒。

我可以使用sqrt 函数。但这并不总是我所期待的。如果我输入 146,我必须得到 (73, 2)。

【问题讨论】:

  • OP 有很多拼写/语法错误。
  • 我已经更改并修复了一些内容。
  • 12 x 12 = 144。146 是故意的吗?
  • 问题不清楚。也许陈述目标有助于理解这一点。
  • 谷歌“perl 数字因子”。在问任何问题之前先尝试一下,这样你就可以学会如何回答自己的问题。

标签: perl integer factors


【解决方案1】:

您可以在 Perl 中使用与其他语言相同的算法。这些想法中没有任何 Perl 特殊的魔法。这只是实现,对于像这样的问题,它可能看起来与任何语言的实现都非常相似。

你想解决什么问题?如果我们知道您要做什么,也许我们可以为您指出正确的算法:

  • 为什么超过 10,000 的数字必须使用 1,000 因子?大多数数字不会有 1,000 因子。
  • 您想要所有的因子,还是只想要最大的因子及其同伴?
  • sqrt 函数不能按预期工作是什么意思?如果您遵循通用算法,您只需要迭代到平方根的下限来测试因子。大多数整数没有整数平方根。

【讨论】:

    【解决方案2】:

    如果数字不是素数,您可以使用因式分解算法。

    这里有一个这样的函数的例子:http://www.classhelper.org/articles/perl-by-example-factoring-numbers/factoring-numbers-with-perl.shtml

    【讨论】:

    • 即使一个数是素数,您也可以使用因式分解算法。你只是没有得到任何额外的因素。 :)
    • 确实如此,但结果将只是 1 x N,我认为这对原始海报不太有用:)。
    【解决方案3】:

    遍历可接受范围内的一些常见数字(例如,9 到 15),以您的测试数字为模计算余数,然后选择最小值。

    sub compute_width {
        my ($total_records) = @_;
        my %remainders;
        for(my $width = 9; $width <= 15; $width += 1) {
          my $remainder = $total_records % $width;
          $remainders{$width} = $remainder;
        }
        my @widths = sort { 
          $remainders{$a} <=> $remainders{$b} || 
          $a <=> $b 
        } keys %remainders;
        return $widths[0];
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 2020-04-14
      • 2015-03-09
      • 2010-11-08
      相关资源
      最近更新 更多