
C语言题:求素数(prime) 求代码 急 满意加分
问题描述:现给你N个0~9的数字并排成了一列,同时还给出了一个取数长度L。规定先从第1个数字开始从左往右连续取L个数字,拼成一个长度为L位(最高位为0的数除外)的数,然后...
问题描述:
现给你N个0~9的数字并排成了一列,同时还给出了一个取数长度L。规定先从第1个数字开始从左往右连续取L个数字,拼成一个长度为L位(最高位为0的数除外)的数,然后从第2个数字开始从左往右连续取L个数字……,这样,最后最多可以得到N-L+1个L位数。现在请你将这些L位数中的素数按从小到大的顺序输出(如果产生重复,只需输出一个)。
输入文件:
第一行为N和L(1≤N≤10000,1≤L≤7);第二行为N个0~9的数字,中间用空格隔开。
输出文件:
只有一行,升序输出全部满足条件的素数,以空格隔开。
输入样例:
10 3
8 9 1 0 2 3 5 4 7 6
输出样例:
547 展开
现给你N个0~9的数字并排成了一列,同时还给出了一个取数长度L。规定先从第1个数字开始从左往右连续取L个数字,拼成一个长度为L位(最高位为0的数除外)的数,然后从第2个数字开始从左往右连续取L个数字……,这样,最后最多可以得到N-L+1个L位数。现在请你将这些L位数中的素数按从小到大的顺序输出(如果产生重复,只需输出一个)。
输入文件:
第一行为N和L(1≤N≤10000,1≤L≤7);第二行为N个0~9的数字,中间用空格隔开。
输出文件:
只有一行,升序输出全部满足条件的素数,以空格隔开。
输入样例:
10 3
8 9 1 0 2 3 5 4 7 6
输出样例:
547 展开
展开全部
// C++写的,如果要用C的话,基本思路不变,vector改用数组,然后需要自己写排序函数
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
//判断是否质数
bool isPrime(int n) {
int sqr = sqrt(n);
for (int i = 3; i <= sqr; i += 2) {
if (n % i == 0) return false;
}
return true;
}
void maxPrime(vector<int> &nums, int N, int L) {
vector<int> ret;
for (int i = 0; i < N - L + 1; ++i) {
if (nums[i] != 0 && nums[i + L - 1] != 2) {
int num = 0;
for (int j = i; j < i + L; ++j) {
num = 10 * num + nums[j];
}
if (isPrime(num)) ret.push_back(num);
}
}
sort(ret.begin(), ret.end());
for (int i = 0; i < ret.size(); ++i) {
cout << ret[i] << ' ';
}
}
int main() {
int N, L;
cin >> N >> L;
vector<int> nums(N);
for (int i = 0; i < N; ++i) cin >> nums[i];
maxPrime(nums, N, L);
return 0;
}
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
//判断是否质数
bool isPrime(int n) {
int sqr = sqrt(n);
for (int i = 3; i <= sqr; i += 2) {
if (n % i == 0) return false;
}
return true;
}
void maxPrime(vector<int> &nums, int N, int L) {
vector<int> ret;
for (int i = 0; i < N - L + 1; ++i) {
if (nums[i] != 0 && nums[i + L - 1] != 2) {
int num = 0;
for (int j = i; j < i + L; ++j) {
num = 10 * num + nums[j];
}
if (isPrime(num)) ret.push_back(num);
}
}
sort(ret.begin(), ret.end());
for (int i = 0; i < ret.size(); ++i) {
cout << ret[i] << ' ';
}
}
int main() {
int N, L;
cin >> N >> L;
vector<int> nums(N);
for (int i = 0; i < N; ++i) cin >> nums[i];
maxPrime(nums, N, L);
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询