我刚刚开始学习C语言,我正在尝试质数,也许不使用flag,或者break,或者bool?
在这里我试图建立一个程序,它将给我第8个质数,但它运行不正确,我非常不确定决定一个数字是否是一个质数的部分。
int main(void){
int i,j,th = 0;
int n = 8;
for (i=2; th <= n; i++) {
for(j=2; j<=i; j++) {
if(i%j !=0) {
th = th + 1;
printf("%d",i);
}
}
}
}
发布于 2020-10-08 15:29:03
问题是,有太多的案例属于这样的情况
if (i % j != 0)
例如,(i = 4,j= 3)但4不是质数。您需要将j从2循环到i,
的平方根,以确保它们都是不可除的。
在没有标志的情况下,这似乎很困难(您可以做的一个技巧是获取i > 4
的(i-1)! % i == 0
)。
发布于 2020-10-08 18:38:18
在这个for循环中
for(j=2; j<=i; j++) {
if(i%j !=0) {
th = th + 1;
printf("%d",i);
}
}
只要存在i % j
不等于0的除数j
,就可以将一个数作为质数输出。
例如,如果i
等于4
(并且它不是质数),而j
等于3
,那么您将输出4
,因为4 % 3
不等于0
。
还有循环的条件
for(j=2; j<=i; j++) {
^^^^
是不正确的,因为i
总是可以被自身整除的。
该程序看起来像下面的演示程序所示的那样。
#include <stdio.h>
int main( void )
{
while ( 1 )
{
printf( "Enter a non-negative number (0 - exit): " );
unsigned int n;
if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
putchar( '\n' );
for ( unsigned long long i = 0; n != 0; i++ )
{
int prime = i % 2 == 0 ? i == 2 : i != 1;
for ( unsigned long long j = 3; prime && j <= i / j; j += 2 )
{
prime = i % j != 0;
}
if ( prime )
{
printf( "%llu ", i );
--n;
}
}
putchar( '\n' );
putchar( '\n' );
}
}
程序输出可能如下所示
Enter a non-negative number (0 - exit): 20
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71
Enter a non-negative number (0 - exit): 8
2 3 5 7 11 13 17 19
Enter a non-negative number (0 - exit): 0
https://stackoverflow.com/questions/64257339
复制相似问题