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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP