显示素数

时间:2015-10-07 12:58:11

标签: c arrays for-loop input primes

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

SELECT Foo, Count(*) OVER (Partition By Foo, Bar, Baz)
FROM MyTable

4 个答案:

答案 0 :(得分:1)

因此,您的代码存在一些问题,但解决您问题的问题只是算法。

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

改变这个:

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;
        }
}

对此(我已为clairty添加了一些括号,因此我们确定条件的评估符合我们的预期):

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]列出[19],你现在正在从列表[1]循环到列表[20],这实际上超出了范围,我很惊讶你没有得到段错误!)

答案 1 :(得分:0)

检查

#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;
}

答案 2 :(得分:0)

您的代码中会出现“123”或“-15”类型的人?检查并查看是否可以修复错误。

修复后,我们可以查看您的主要检查代码。提示:网上有很多主要的测试代码示例。

答案 3 :(得分:0)

更高效的方式

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)