C++数组中连续素数的最大个数


给定一个随机排列的素数数组,数组大小为N。目标是找到数组中最长的连续素数序列。

素数只有两个因数:1和它本身。1,2,3,5,7,11,13……是素数,而4,6,8,9,10……20是非素数。每个非素数都有两个以上的因数。让我们通过例子来理解。

输入 − Arr[] = { 1,3,5,2,6,7,13,4,9,10}

输出 − 3

解释 − 上述数组中的素数是3,5,2,7,13。连续的数字是3,5,2和7,13。最长序列有3个数字。所以答案是4。(译者注:原文答案有误,应该是3)

输入 − Arr[] = { 5,7,17,27,31,21,41 }.

输出 − 3

解释 − 上述数组中的素数是5,7,17,31,41。连续的数字是5,7,17。最长序列有3个数字。所以答案是3。

下面程序中使用的方法如下:

  • 整数数组Arr[]用于存储素数和非素数。

  • 函数isprime(int num)用于检查num是否为素数。如果它是素数,那么它在达到其一半之前不应该有任何因数。

  • 对于素数,isprime()返回1,否则返回0。

  • 函数primeSubarray(int arr[], int n)接受两个输入参数:数字数组本身及其大小。返回最长连续素数序列的大小。

  • 从头遍历arr[]中的数字。如果arr[i]是非素数(isprime(arr[i])==0),则将连续素数的计数更改为0。

  • 如果它是素数,则增加素数计数。(如果遇到非素数,它将从0重新开始)

  • 检查计数是否是到目前为止的最大值,如果是,则将其值存储在maxC中。

  • 返回maxC作为结果。

示例

 在线演示

#include <iostream>
#include <stdio.h>
int isprime(int num){
   if (num <= 1)
      return 0;
   for (int i = 2; i <= num/2; i++)
      if (num % i == 0)
         return 0;
   return 1; //if both failed then num is prime
}
int primeSubarray(int arr[], int n){
   int count=0;
   int maxSeq=0;
   for (int i = 0; i < n; i++) {
      // if non-prime
      if (isprime(arr[i]) == 0)
         count = 0;
         //if prime
      else {
         count++;
         //printf("\n%d",arr[i]); print prime number subsequence
         maxSeq=count>maxSeq?count:maxSeq;
      }
   }
   return maxSeq;
}
int main(){
   int arr[] = { 8,4,2,1,3,5,7,9 };
   int n =8;
   printf("Maximum no. of contiguous Prime Numbers in an array: %d",
   primeSubarray(arr, n));
   return 0;
}

输出

如果运行上述代码,它将生成以下输出:

Maximum no. of contiguous Prime Numbers in an array : 3

更新于:2020年8月17日

390 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告