C程序查找n';次素数- #包括 #包括 #包括 整数素数(长整数); 长整型*arr//包含n个素数的数组 int main() { int i,计数=4;; 长整型n; scanf(“%lli”&n); arr=malloc(sizeof(long-long-int)*n); arr[0]=2; arr[1]=3; arr[2]=5; arr[3]=7; 如果(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]); 其他的 { 对于(i=2;count=2),我只检查了那些*/ 计数+++;} 如果(prime(6*i+1)&&count

C程序查找n';次素数- #包括 #包括 #包括 整数素数(长整数); 长整型*arr//包含n个素数的数组 int main() { int i,计数=4;; 长整型n; scanf(“%lli”&n); arr=malloc(sizeof(long-long-int)*n); arr[0]=2; arr[1]=3; arr[2]=5; arr[3]=7; 如果(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]); 其他的 { 对于(i=2;count=2),我只检查了那些*/ 计数+++;} 如果(prime(6*i+1)&&count,c,arrays,malloc,unsigned-long-long-int,C,Arrays,Malloc,Unsigned Long Long Int,如果这是您的实际代码,那么您有4个错误: 2行注释确定代码的一行范围 第二个if应该检查count

如果这是您的实际代码,那么您有4个错误:

  • 2行注释确定代码的一行范围

  • 第二个if应该检查
    count
    not
    count如果这是您的实际代码,那么您有4个bug:

    • 2行注释确定代码的一行范围

    • 第二个if应该检查
      count
      not
      count您的计数器超出了数组的大小。具体来说,对于i=2,这两个条件(6i-1和6i+1)都满足,因此计数器会增加两次,从而使用arr[5]您在数组中只分配了5个位置。这是因为您检查计数器您的计数器超出了数组的大小。具体来说,对于i=2,这两个条件(6i-1和6i+1)都满足,因此计数器会增加两次,从而使用arr[5]你在数组中只分配了5个位置。这是因为你检查了country countI。我回滚了格式更改,这只是修改器喜欢的代码格式样式更改,并掩盖了其中一个错误。这是我第一次在这里查询。我是无辜的:我回滚的是NetVipeC的格式更改。你是using使用了混合的支撑样式,但大部分是块,他将整个事情更改为K&R。Try countI回滚了格式更改,这只是对修改器喜欢的代码格式的样式更改,并掩盖了其中一个错误。这是我第一次在这里查询。我是无辜的:PIt是我回滚的NetVipeC格式更改。您正在使用一个混合的支撑风格,但大部分是块,他把整个事情改成K&R。我只在这里添加了那些注释,它们不在代码中。TBH,countI只在这里添加了那些注释,它们不在代码中。TBH,count
      
      #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;
      }
      
      while( arr[j] * arr[j] < x )