九度1163:素数

来源:互联网 发布:学算法 画流程图 编辑:程序博客网 时间:2024/06/15 06:51

九度1163素数

本程序来自九度1163题.

  • 素筛法简介
  • C程序实现

素筛法简介

我们按如下思路考虑:
若一个数不是素数,则必存在一较小的数为因数。
假如获得了小于一个数的所有素数,只需确定该数不能被这些素数整除,这个数即为素数。
在获得一个素数时我们将其所有倍数标记为非素数,这样当我们遍历到一个数时,它没有被任何小于它的素数标记,则确定为素数

代码

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <iostream>using namespace std;int hasht[15001] = { 0 };int mark[15001] = { 0 };void init(){    int i, k = 0, n = 2;    for (i = 0; i < 15001; i++){        mark[i] = 1;    }    //mark[2] = 1;    for (i = 2; i < 15001; i++){        if (mark[i] == 0) continue;        mark[i] = 1;        hasht[k++] = i;        //int tm = i*n++;        n = 2;        while (i*n <= 15000)            mark[i*n++] = 0;            }}int main(){    init();//初始化所有素数    int n = 0;    while (scanf("%d",&n)!=EOF){        int flag = 0;        for (int i = 0; hasht[i] < n; i++)        {            if (hasht[i] % 10 == 1 && !flag)//注意输出格式            {                cout << hasht[i];                flag = 1;            }            else if (hasht[i] % 10 == 1 && flag){                cout << " " << hasht[i];            }        }        if (!flag) cout << "-1";        cout << endl;    }    return 0;}
1 0
原创粉丝点击