我正在尝试使用random.org计算真随机数的GCD并从文本文件中获取这些数字。这是一个用我之前创建的PRNG完成上述程序的程序。
#!/usr/bin/perl
use strict;
use warnings;
my $range = 100;
my $gcdcount = 0;
sub gcd_iter($$) {
my ($u, $v) = @_;
while ($v) {
($u, $v) = ($v, $u % $v);
}
return abs($u);
}
for (my $count=0; $count<=5000; $count++) {
my $random_numx = int(rand($range));
my $random_numy = int(rand($range));
my @pair = ($random_numx, $random_numy);
if (gcd_iter($random_numx, $random_numy) == 1) {
$gcdcount++;
}
}
print "The GCD Count for PRNG #1 is $gcdcount\n";
我几乎做了同样的事情,但从文本文件中获取数字。我如何将这些数字对转换为一种格式,我可以为其分配变量,以便在分割线后将它们放入公式中?以下是我到目前为止的情况:
my $filename = 'xxxxx';
open(my $fh, $filename)
or die "Could not open file '$filename' $!";
sub gcd_iter($$) {
my ($u, $v) = @_;
while ($v) {
($u, $v) = ($v, $u % $v);
}
return abs($u);
}
for (my $count=0; $count<=5000; $count++) {
if (gcd_iter($) == 1) {
$gcdcount++;
}
}
while (my $row = <$fh>) {
chomp $row;
foreach ($row) {
my @pair = split('s+', $_);
}
}
答案 0 :(得分:0)
您走在正确的轨道上,但可以通过输入
获益perldoc -f split
Perl具有出色的内置文档。 我会改变你的界限:
foreach ($row) {
my @pair = split('s+', $_);
}
为:
my @pair = split(/\s+/, $row);
并将$num1
和$num2
设置为$pair[0]
和$pair[1]
...或只是使用:
my ($num1, $num2) = split(/\s+/, $row);
直接获取您感兴趣的两个标量。
换句话说,您不需要foreach $row
行(您已经拥有$row
),而\s
是空格的简写模式匹配。
祝你好运,玩得开心!