#!/usr/bin/perl -w
# 基本思路: 从2开始,把每个2的倍数去掉,2 之后是3,5,7。。。。 依次类推
use strict;
my $factor_number; #使用这个参数来确定要循环的次数,
my $list=" "; #把2..200的数转成按空格分的串存放
my $cur_prime; #当前素数
my @restlt; #存放最后结果
my $temp; # 在替换合数时用的中间变量
my $t; # 一列列的打印数组用到的变量
foreach( 2..200)
{
$list=$list." ".$_; # 成串
}
until ($list !~ /^\s+([0-9]+)\s+/) #直到最后
{
if ( $list =~ /^\s*([0-9]+)\s+/ ) # 取到队列的第一个数
{
push @restlt ,$1; #存到结果里
$cur_prime=$1;
}
$factor_number = int(200 / $cur_prime) ; # 能有多少个
for (my $i=1; $i<=$factor_number;$i++)
{
my $temp = $cur_prime*$i;
$list =~ s/\s+$temp\s+/ / ;
}
}
#print "the prime are : \n @restlt\n";
my $count = @restlt;
print "\t\t THERE ARE $count prime numbers BETWEEN 2 TO 200\n";
print "Print the prime numbers in lines :\n";
foreach $t(@restlt)
{
print "$t\n";
}
阅读(1536) | 评论(0) | 转发(0) |