Найти все целые числа, которые умножается дает X? - PullRequest
3 голосов
/ 02 июня 2011

Если у меня есть число, скажем, 12, как я могу вычислить все умноженные числа, которые дадут 12?

Пример: если 12, то решение будет 1x12, 2x6, 3x4.

Как это будет сделано?

Ответы [ 2 ]

6 голосов
/ 02 июня 2011

Работы Кристиана для метода грубой силы, чтобы быть более элегантным, попробуйте реализовать некоторый алгоритм целочисленной факторизации .

РЕДАКТИРОВАТЬ:

После копания через CPANдолжен) Я нашел Math::Factor::XS, вот пример (также я смоделировал чистый пример Perl, используя grep / map):

#!/usr/bin/perl
use strict;
use warnings;
use 5.10.0;

use Math::Factor::XS qw/factors matches/;

my $num = 12;

say "Factors:";
my @factors = factors $num;
say for @factors;

say "Matches:";
say $_->[0] . "x" . $_->[1] for ( [ 1, $num ] , matches($num, \@factors));

# using grep 
say "Grep:";
my @grep_factors = map { [ $_ , $num / $_ ] } grep { !($num % $_) } (1 .. int sqrt $num);
say $_->[0] . "x" . $_->[1] for @grep_factors;
5 голосов
/ 02 июня 2011

Проверка от 1 до sqrt(x) для делителей.Используйте эти и их пары.Остерегайтесь квадратов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...