博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
6-181 筛法求质数 (15分)
阅读量:3952 次
发布时间:2019-05-24

本文共 1152 字,大约阅读时间需要 3 分钟。

东软学习小组成员:夜枫

本题要求使用筛法求出1~N以内的质数。

函数接口定义:
vector sieve(int n); //函数声明, 求n以内的质数

求n以内的质数。其中 n是传入的参数。n 的值不超过10 000 000的范围; 求出的质数存入容器vector并返回。

裁判测试程序样例:

#include 
#include
using namespace std;vector
sieve(int n); //函数声明,求n以内的质数int main(int argc, char const *argv[]){
int n; cin >> n; vector
ans = sieve(n); cout << ans.size() << endl; for (int i = 0; i < ans.size(); i++) {
cout << ans[i]; if (i < ans.size() - 1)cout << " "; } cout << endl; return 0;}/* 请在这里填写答案 */

答案:

#include
bool a[10000002];vector
sieve(int n) {
vector
temp; int cont = 0; memset(a, true, sizeof(a)); for (int i = 2; i <= n; ++i) {
if (a[i]) {
temp.push_back(i);//加入数组 } cont = temp.size();//在这里得到,数组的元素个数,可以避免for循环内反复调用函数,节省时间 for (int j = 0; j < cont&&temp[j]*i<=n; ++j) {
a[temp[j] * i] = false; if (i % temp[j] == 0) {
//避免重复标记//当前数i 是当前素数的倍数,则后面的素数乘以当前数肯定是当前数的倍数,会造成重复标记,所以遇到整除要结束当前循环的标记,进入下一轮 break; } } } return temp;}

转载地址:http://qggwi.baihongyu.com/

你可能感兴趣的文章
使用互斥量保证程序最多只有一个实例运行
查看>>
进程定点自杀
查看>>
进程看门狗
查看>>
线程看门狗
查看>>
调试代码的宏定义
查看>>
__FILE__和__FUNCTION__的使用
查看>>
创建、重命名文件
查看>>
文件大小保护
查看>>
先文件大小保护,再写文件
查看>>
目录创建
查看>>
日志文件系统的写日志函数
查看>>
删除目录下的文件
查看>>
删除指定目录下所有文件及目录
查看>>
判断文件夹名是否是合法YYYYMM格式
查看>>
检查日志文件系统
查看>>
读配置文本
查看>>
使用rapidxml创建XML
查看>>
使用rapidxml从xml文件中读取指定项(建议两层)
查看>>
char字符串转CString
查看>>
VS2008 定时器使用
查看>>