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
展开
 我来答
eXistenZz
2015-06-06 · 超过14用户采纳过TA的回答
知道答主
回答量:30
采纳率:0%
帮助的人:24万
展开全部
// 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;
}
Song宋peng
2015-06-06 · TA获得超过583个赞
知道小有建树答主
回答量:1012
采纳率:0%
帮助的人:378万
展开全部
#include <math.h>
prime(int m)
{int i;
for(i=2;i<sqrt(m);i++)
 if(m%i==0)
  return 0;
return 1;
}
main()
{int m;
scanf("%d",&m);
if(prime(m))
 printf("Yes\n");
else
 printf("No\n");
getch();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式