我在下面编写的这个编程用于显示用户键入的列表中的素数(20个数字)。但它只能检测到2和3为素数。我不知道它为什么不起作用。请告诉我哪里有错误并帮助我改进它。 TQ
SELECT Foo, Count(*) OVER (Partition By Foo, Bar, Baz)
FROM MyTable
答案 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)