给我们一个素数数组,以随机顺序排列。数组的大小为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