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
广告