PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 95


> Смотри также---------------------------------------------------------------------------------------------

Описание тернарного оператора выбора в perlop(l); документация по модулю Lingua::EN::Inflect с CPAN.

2.19. Программа: разложение на простые множители

Следующая программа получает один или несколько целых аргументов и рас­кладывает их на простые множители. В ней используется традиционное числовое представление Perl, кроме тех ситуаций, когда представление с плавающей запя­той может привести к потере точности. В противном случае (или при запуске с параметром -Ь) используется стандартная библиотека Math::Blight, что позволя­ет работать с большими числами. Однако библиотека загружается лишь при не­обходимости, поэтому вместо use используются ключевые слова require и import — это позволяет выполнить динамическую загрузку библиотеки во время выполне­ния вместо статической загрузки на стадии компиляции.


92   Глава 2 . Числа

Наша программа недостаточно эффективна для подбора больших простых чи­сел, используемых в криптографии.

Запустите программу со списком чисел, и она выведет простые множители для каждого числа:

$ factors 8 9 96 2178

8 2**3

9                               3**2
96                   2**5 3

2178               2 3**2  11**2

Программа нормально работает и с очень большими числами:

% factors 239322000000000000000000 +239322000000000000000000 2**19 3 5**18 +39887 % factors 23932200000000000000000000 +25000000000000000000000000 2**24 5**26

Исходный текст программы приведен в примере 2.1.

Пример 2.1. bigfact

#!/usr/bm/perl

# bigfact - разложение на простые множители

use strict;

use integer;

use vars qw{ $opt_b $opt_d >; use Getopt::Std;

@ARGV && getopts('bd')     or die "usage: $0 [-b] number ..,"; load_biglib() if $opt_b;

ARG: foreach my $orig ( @ARGV ) { my ($n, $root, %factors, Sfactor); $n = $opt_b ? Math::BigInt->new($orig) : $orig; if ($n + 0 ne $n) { # don't use -w for this




Начало  Назад  Вперед



Книжный магазин