最大编号 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。

输入− 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 (isprime(arr[i]) == 0)
         count = 0;
         //如果素数
      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
猜你喜欢