В твоем алгоритме, для каждого числа производится проверка, не делится ли оно на все предыдущие.
Подсчитай, сколько будет итераций циклов и сколько это займет времени.
Вот вариант, использующий метод "решето Эратосфена" (мог бы и погуглить, прежде, чем слету пытаться писать программу
)
$ cat prost_numb.pl
#!/usr/bin/perl
$N=10000;
$c=0; #для подсчета числа прохода циклов
#заполним все ячейки числами по порядку: 0,1,2,3...
for($i=0; $i<$N; $i++){
$a[$i] = $i;
}
#поскольку 1 не простое число, обнулим ячейку с этим числом
$a[1]=0;
#выкидываем непростые числа
for($s=2; $s<$N; $s++){
if($a[$s]!=0){
for($j=$s*2; $j<$N; $j+=$s){
$c++;
$a[$j]=0;
}
}
}
#печатаем результат
print "число проходов цикла: $c\n";
for($i=0; $i<$N; $i++){
if($a[$i]!=0){
printf("%d\n", $a[$i]);
}
}
$ time perl prost_numb.pl > 1.txt
real 0m0.095s
user 0m0.078s
sys 0m0.007s
при этом:
число проходов цикла: 23069
и среди первых 10000 чисел найдено 1229 простых чисел
В аттаче - результат
"No! Try not! Do. Or do not. There is no try." -- Yoda