显示质数

Display prime number

我在下面编写的这个程序用于显示用户键入的列表(20 个数字)中的质数。但它只能将 2 和 3 检测为质数。我不知道为什么它不起作用。请告诉我错误在哪里,并帮助我改进它。 TQ.

#include <iostream>
#include <conio.h>
using namespace std;

void main ()
{
    int i,number,list[20];
    int t,p,prime=0;


    cout<<"please key 20 numbers from 0 to 99"<<endl;


    for(i=1;i<21;i++)
    {
        cin>>number;

        if((number<0)||(number>99))
        {
            cout<<"Please key in an integer from 0 to 99"<<endl;

        }

        list[i]=number;

    }


    for(p=1;p<21;p++)
    {
        for(t=2;t<list[p];t++)
        {
            if ( list[p]%t==0)
            {
                prime=prime+1;
            }
        }
            if (prime==0&&list[p]!=1)
            {
                cout<<"Prime numbers:"<<list[p]<<endl;
            }
    }

getch();
}

检查这个

#include<stdio.h>

int main()
{
   int n, i = 3, count, c;

   printf("Enter the number of prime numbers required\n");
   scanf("%d",&n);

   if ( n >= 1 )
   {
      printf("First %d prime numbers are :\n",n);
      printf("2\n");
   }

   for ( count = 2 ; count <= n ;  )
   {
      for ( c = 2 ; c <= i - 1 ; c++ )
      {
         if ( i%c == 0 )
            break;
      }
      if ( c == i )
      {
         printf("%d\n",i);
         count++;
      }
      i++;
   }

   return 0;
}

如果有人输入“123”或“-15”,您的代码会发生什么情况?检查并查看是否可以修复错误。

当你解决了这个问题后,我们可以查看你的素数检查代码。提示:网络上有很多主要的测试代码示例。

所以您的代码存在一些问题,但解决您问题的方法很简单。

当你从 p 的下一次迭代开始时,你不会重置素数的值,因此在我们检测到第二个素数后它总是 > 0,你将永远不会再打印出来。

改变这个:

for(p=1;p<21;p++)
{
    for(t=2;t<list[p];t++)
    {
        if ( list[p]%t==0)
        {
            prime=prime+1;
        }
    }
        if (prime==0&&list[p]!=1)
        {
            cout<<"Prime numbers:"<<list[p]<<endl;
        }
}

为此(我添加了一些括号以确保清晰度,因此我们确定条件的计算符合我们的预期):

for(p=0;p<20;p++)
{
    for(t=2;t<list[p];t++)
    {
        if ( list[p]%t==0)
        {
            prime=prime+1;
        }
    }
        if ( (prime==0) && (list[p]!=1) )
        {
            cout<<"Prime numbers:"<<list[p]<<endl;
        }
        prime = 0;
}

你的问题就解决了。

但是:我想重申这并不能解决您所有的代码问题。确保你非常仔细地考虑输入部分和循环的内容(为什么 p 是 1 到 21?为什么不是 0 到 20 ;)数组在 C 中是零索引的,这意味着你的 20 个数字列表来自 list[0]到 list[19],你目前正在从 list[1] 循环到 list[20],这实际上超出了范围,我很惊讶你没有遇到段错误!)

更高效的方法

def print_hi(n):
if(n == 1 ):
    return False;
if( n == 2 or n == 3):
    return True;
if(n % 2 == 0 or n % 3 == 0):
    return  False;

for i in range (5,n,6):
    if( i * i <= n):
        if(n % i == 0 or n % (i+2) == 0):
            return False
        return True


if __name__ == '__main__':
  x = print_hi(1032)
  print(x)