我又双叒叕刷题喽!
今天我要为大家分享我简单粗暴的洛谷P5736 【深基7.例2】质数筛 C++(C++14,g++9)解法。题目请自行查看:P5736 【深基7.例2】质数筛 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
首先,一看题就知道,代码的输入部分肯定又是这样的:
int a[100000] = { 0 };
int n = 0;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
毕竟这样的输入,也不是一次两次碰见了。再说数组范围,直接稍微写一个小程序就能解决:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a = 0, b = 0;
cin >> a >> b;
cout << pow(a, b) << endl;
system("pause");
return 0;
}
简简单单,得出,简单吧?
这一题跟P5735不一样,代码重用可比三次多得多,那,写个函数呗。求质数还不简单?指数就是一个数除以它本身或者1以外的数都不能整除,这等于把循环条件给我们了。循环条件都有了,代码有什么写不出来的:
bool get_num(int n)
{
bool pd = true;
for (int i = 2; i <= n - 1; i++)
{
if (n % i == 0)
{
pd = false;
}
}
if (pd)
{
return true;
}
return false;
}
设一个布尔类型的函数,符合条件返回true,不符合的返回false。
输出不用说了,但是刚才那个函数有一个弊端:无法判断。但是解决十分简单,在输出条件里加个不等于一就是了。
完整代码(全AC通过):
#include <iostream>
#include <cstdlib>
using namespace std;
int a[100000] = { 0 };
bool get_num(int n)
{
bool pd = true;
for (int i = 2; i <= n - 1; i++)
{
if (n % i == 0)
{
pd = false;
}
}
if (pd)
{
return true;
}
return false;
}
int main()
{
int n = 0;
cin >> n;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
for (int i = 1; i <= n; i++)
{
if (!get_num(a[i]))
{
a[i] = 0;
}
}
for (int i = 1; i <= n; i++)
{
if (a[i] != 0 && a[i] != 1)
{
cout << a[i] << " ";
}
}
cout << endl;
system("pause");
return 0;
}