如何修复这个问题(perl)

huangapple go评论54阅读模式
英文:

How do I fix this (perl)

问题

这是Perl代码,用于找到用户提供的数字范围内的所有素数。问题可能出在代码的逻辑错误和重复变量名上。以下是一些潜在问题:

  1. 在代码中有多个地方都使用了相同的变量名 $i$j,这可能导致混淆和逻辑错误。

  2. 在三个嵌套的 for 循环中,循环变量 $i$j 的使用混淆,应该使用不同的变量名来表示不同的计数器。

  3. 在第一个 if 语句中,检查 $numberer 是否小于或等于3,这似乎不是正确的条件。应该检查 $i 是否小于或等于3。

  4. 代码中似乎试图使用 @nonprime 数组来存储非素数,但在处理非素数时,逻辑不清晰。应该考虑一种更简单和有效的方法来标识非素数。

  5. 在最后一行使用 Dumper 来打印结果,但它只会打印出已存储在 @nonprime 数组中的非素数,而没有找到素数。

如果你需要进一步的帮助,我建议首先修复这些问题,然后尝试重新编写代码,以确保正确地找到素数并输出它们。如果你有关于Perl编程的具体问题,也可以提出来,我会尽力帮助你理解和解决它们。

英文:

Here's the code; it's in Perl.

use warnings;
use strict;
use Data::Dumper;
print "I'll show the prime numbers between 2 and u numbers for you.\n";
print "Pls, enter u numbers.";
my $numberer = <STDIN>;
my @nonprime = qw();
my @all = qw();
for (my $i = 3; $i < $numberer; $i++) {
    my $lenght = @all;
    $all[$lenght] = $i;
    for (my $i = 3; $i < $numberer; $i++) {
        if ($numberer <= 3) {
            print "It's none.";
        } else {
            for (my $i = 3; $i < $numberer; $i++) {
                for (my $j = 2; $j < $numberer; $j++) {
                    if ($i == $j) {
                    } elsif ($i % $j == 0) {
                        my $len = @nonprime;
                        $nonprime[$len] = $i;
                    } else {
                    }
                }
            }
        }
        my %h;
        @h{@nonprime} = @nonprime;
        print Dumper [grep {!exists $h{$_}} @all];

Can you help me by explaining what the problem is? I try to learn perl programming and do some exercise that is "Write your own program to capture all the prime numbers between 2 and a number the user
gives you."

答案1

得分: 1

这段代码可能会帮助你解决问题。

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

sub testprime
{
      my $m = shift @_;
      my $i = 2;
      while ($i < $m)
      {
            return 0 unless ($m % $i++);
      }
      return 1;
}

print "输入一个数字来查找是否为素数:\n";
chomp (my $n = <STDIN>);
system 'cls';
for(my $i=2; $i<=$n; $i++)
{
    my $FindPrime = testprime($i);
    if ( $FindPrime == 1)
    {
          print "是的,给定的数字 - $i 是素数\n";
    }
    else
    {
          print "不,它不是素数 - $i\n";
    }
}

感谢。

英文:

Might be this code will help you for your question.

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

sub testprime
{
      my $m = shift @_;
      my $i = 2;
      while ($i &lt; $m)
      {
	    return 0 unless ($m % $i++);
      }
      return 1;
}

print &quot;Enter a number to find the prime \n&quot;;
chomp (my $n = &lt;STDIN&gt;);
system &#39;cls&#39;;
for(my $i=2; $i&lt;=$n; $i++)
{
	my $FindPrime = testprime $i;
	if ( $FindPrime == 1)
	{
	      print &quot;Yes, the given number - $i is Prime \n&quot;;
	}
	else
	{
	      print &quot;No, It is NOT a prime Number - $i \n&quot;;
	}
}

Thnx.

huangapple
  • 本文由 发表于 2023年1月6日 10:46:57
  • 转载请务必保留本文链接:https://go.coder-hub.com/75026457.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定