0
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int prime(long long int);
long long int *arr;         //array to hold n prime numbers
int main()
{
    int i,count=4;;
    long long int n;
    scanf("%lli",&n);
    arr=malloc(sizeof(long long int)*n);
    arr[0]=2;
    arr[1]=3;
    arr[2]=5;
    arr[3]=7;
    if (n==1) printf("%lli",arr[0]);
    else{ if (n==2) printf("%lli",arr[1]);
    else{ if (n==3) printf("%lli",arr[2]);
    else{ if (n==4) printf("%lli",arr[3]);
    else
    {
        for(i=2;count<n;i++)
        {
            if(prime(6*i-1)) {             /*As prime nos are always 6k+1 or 
            arr[count]=6*i-1;               6k-1fork>=2 I checked only for those*/
            count++; }
            if(prime(6*i+1)&&count<=n) {
            arr[count]=6*i+1;
            count++; }
            }
    printf("%lli",arr[count]);
    }}}}
    //free(arr);
return 0;
}

int prime(long long int x)
{
    int j=1,flag=1;
    while(arr[j]<=sqrt(x))
    {
        if (x%arr[j]==0)
        {
            flag=0;
            break;
        }
        j++;
    }
    return flag;
}
  1. コードは n=1,2,3,4、つまり値が明示的に指定されている i=0,1,2,3 に対してのみ機能します。n=5 以降では、O/P として 0 を与えています
  2. free(arr)コア ダンプ エラーが発生しているため、グローバル ダイナミック アレイに関連するグリッチがあります。Q: これはグローバル動的配列を宣言する正しい方法ですか? このコードの問題は何でしょうか? 前もって感謝します。
4

2 に答える 2