题目描述
输入 n 个不大于 的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数
输入格式
第一行输入一个正整数 n,表示整数个数。
第二行输入 n 个正整数 ,以空格隔开。
输出格式
输出一行,依次输出 中剩余的质数,以空格隔开。
输入输出样例
输入 #1 输出 #1
5 3 5 7
3 4 5 6 7
说明/提示
数据保证,1≤n≤100,1≤ ≤ 。
解题思路
1) 定义一个队列 prime;
queue<int> prime;
2) 定义一个自定义函数judge,函数judge用于判断一个数是否为素数, 并将为素数的数放入队列prime;
int juege(int n)
{
bool flag = true;
for(int i = 2; i <= sqrt(n); i++)
{
if(n % i == 0)
{
flag = false;
break;
}
}
if(flag && n > 1)
{
prime.push(n);
}
else
{
return 0;
}
}
3)在主函数中, 输入n 与 另外n 个数,再用以上函数进行判断,最后输出即可;注意这里输出是输出一个队列。
int main()
{
int n, m;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
cin >> m;
juege(m);
}
while(!prime.empty())
{
cout << prime.front() << " ";
prime.pop();
}
return 0;
}
最终代码
如下:
#include<bits/stdc++.h>
using namespace std;
queue<int> prime;
int juege(int n)
{
bool flag = true;
for(int i = 2; i <= sqrt(n); i++)
{
if(n % i == 0)
{
flag = false;
break;
}
}
if(flag && n > 1)
{
prime.push(n);
}
else
{
return 0;
}
}
int main()
{
int n, m;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
cin >> m;
juege(m);
}
while(!prime.empty())
{
cout << prime.front() << " ";
prime.pop();
}
return 0;
}
本题出自洛谷题库
【深基7.例2】质数筛 - 洛谷https://www.luogu.com.cn/problem/P5736
谢谢!!!
———————————————————————————————————————————
本文作者为小学生,若有不足请指正,非常感谢!