题目描述
输入 n 个不大于 105105 的正整数。要求全部储存在数组中,去除掉不是质数的数字,依次输出剩余的质数。
输入格式
第一行输入一个正整数 n,表示整数个数。
第二行输入 n 个正整数 ai,以空格隔开。
输出格式
输出一行,依次输出 ai 中剩余的质数,以空格隔开。
题解:
我觉得做题是一个积累的过程,比如此题,我直接把以前用过的质数判断函数抄过来。
定义一个布尔类型的函数,返回值只有true和false。众所周知1不是质数,0,-1往下更不是了,所以直接判断条件小于2.
i*i<=x可以写成i<sqrt(x) 用平方根函数,记得带上头文件<cmath>
bool Isprime(int x)
{
if(x<2) return false;
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
{
return false;
}
}
return true;
}
诸如此类,还有单词数判断,最多出现字符判断函数都可以通过积累备战。
int main()
{
int n;
int arr[100000];
cin >> n;
for(int i=0;i<n;i++)
{
cin >> arr[i] ;
}
for(int i=0;i<n;i++)
{
if(Isprime(arr[i]) == true)
{
cout << arr[i] << " ";
}
}
return 0;
}
先遍历数组读入数字。
输出时再遍历,如果判断数组中的数字是质数则输出。
完整代码
#include <iostream>
using namespace std;
bool Isprime(int x)
{
if(x<2) return false;
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
{
return false;
}
}
return true;
}
int main()
{
int n;
int arr[100000];
cin >> n;
for(int i=0;i<n;i++)
{
cin >> arr[i] ;
}
for(int i=0;i<n;i++)
{
if(Isprime(arr[i]) == true)
{
cout << arr[i] << " ";
}
}
return 0;
}
写这篇也是记录自己备战过程,有遗漏之处请指正,共勉。