给定N个随机正整数,将其中的质数输出。
例如:
输入:[1, 2, 3, 5, 11, 12]
输出:[2, 3, 5, 11]
注意:
1、输出数组剩余元素先后顺序需要与原数组保持一致。
2、给出数组无需去重。
先说一下我的思路:
1、把所有的1修改为0(在这里用0值表示这个数之前是合数,已被剔除)。
2、把所有的偶数修改为0。
3、循环把所有的 2 * n + 3 修改为0。在此步骤的每一次循环中,都会从剩余数字中找出最大的值 nMaxRemainNum。在下一轮循环中,2 * n + 3 循环到 nMaxRemainNum 的平方根即可。
4、剩下的不为0的数据,就是质数。
以下是我写的代码,跑了几遍,没发现BUG。
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <math.h>
using namespace std;
int g_nMaxNum = 100; // 最大数值
int g_nNumCount = 200; // 数字数量
// 输出数组
void PrintArr(int* pNum, int nCount)
{
for (int nIndex = 0; nIndex < nCount; ++nIndex)
{
if (0 != pNum[nIndex])
{
cout << pNum[nIndex] << " ";
}
}
cout << endl;
}
// 获取随机