简体   繁体   English

如何创建一个存储素数的数组?

[英]how to create an array that stores prime numbers?

Given an array of 8 integers by the user, the program should print out every prime number entered.给定用户一个 8 个整数的数组,程序应该打印出每个输入的素数。 The program after entering some number stops, I don't know why.输入一些数字后程序停止,我不知道为什么。 Could you tell what I did wrong please?你能告诉我我做错了什么吗? code:代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
  
int main()
{
    const int N=8;
    int i, j, count, x;
    int arr[N];
    int prime[N];
    j = 2;
    for(i = 0; i < N; i++)
    {
        printf("Enter a number %d:", i + 1);
        scanf("%d", &arr[i]);
        if (arr[i] == 1)
        {   
            prime[i] = arr[i];
            count++;
        }
        else
        {
            do
            {
                x=arr[i] % j;
                if (x != 0)
                    j++;
                else 
                    break;
            }
            while(true);
            if(arr[i] == j)
            {
                prime[i] = arr[i];
                count++;
            }
        }
    }
            
    for (i = 0; i < count; i++)
        printf("%dth prime number:%d\n", i + 1, prime[i]);  
    
    getch();
    
    return 0;
}

If the user enters an integer which is less than the previous one, your program ends up in an infinite loop.如果用户输入的 integer 小于前一个,您的程序将进入无限循环。 You probably meant to initialize j in the else clause, just before the do-while loop.您可能打算在 else 子句中初始化j ,就在 do-while 循环之前。

Also note that you should check the return value from scanf to make sure that an integer was actually entered.另请注意,您应该检查scanf的返回值,以确保实际输入了 integer。

I use a booleen function to check the element in the array is prime or no,then I fill the array of Prime numbers like this:我使用布尔 function 来检查数组中的元素是否为素数,然后我填充素数数组,如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

bool Prime(int);

int main()
{
    int N;
    do
    {
       printf("Give me the number of numbers :");
       scanf("%d",&N);
    }while(N<1);//in your array must be minimum 1 element
    int prime[N];
    int arr[N];
    int j=0;

    for(int i=0;i<N;i++)
    {
       do
       {
           printf("Enter a number %d:",i+1);
           scanf("%d", &arr[i]);
       }while(arr[i]<0); //you can write while(arr[i]>1) and you just write if(Prime(arr[i])==true)

       if(arr[i]!=1&&arr[i]!=0&&Prime(arr[i])==true)
       {
          prime[j]=arr[i];
          j++;
       }
   }
   printf("\n\n");
   for(int p=0;p<j;p++)
   {
       printf("%d th prime number:%d\n",p+1,prime[p]);
   }
  return 0;
}


bool Prime(int n)
{
    for(int i=2;i<=(n/2);i++)
    {
         if(n%i==0)
         {
             return false;
         }
    }
    return true;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM