首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C语言中不使用flag和break的素数

C语言中不使用flag和break的素数
EN

Stack Overflow用户
提问于 2020-10-08 15:01:53
回答 2查看 639关注 0票数 0

我刚刚开始学习C语言,我正在尝试质数,也许不使用flag,或者break,或者bool?

在这里我试图建立一个程序,它将给我第8个质数,但它运行不正确,我非常不确定决定一个数字是否是一个质数的部分。

代码语言:javascript
运行
复制
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);
        }
   }
}
}
EN

回答 2

Stack Overflow用户

发布于 2020-10-08 15:29:03

问题是,有太多的案例属于这样的情况

代码语言:javascript
运行
复制
if (i % j != 0) 

例如,(i = 4,j= 3)但4不是质数。您需要将j从2循环到i,的平方根,以确保它们都是不可除的。

在没有标志的情况下,这似乎很困难(您可以做的一个技巧是获取i > 4(i-1)! % i == 0 )。

票数 0
EN

Stack Overflow用户

发布于 2020-10-08 18:38:18

在这个for循环中

代码语言:javascript
运行
复制
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

还有循环的条件

代码语言:javascript
运行
复制
for(j=2; j<=i; j++) {
         ^^^^

是不正确的,因为i总是可以被自身整除的。

该程序看起来像下面的演示程序所示的那样。

代码语言:javascript
运行
复制
#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' );
    }
}

程序输出可能如下所示

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64257339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档