003 数素数

ぐ巨炮叔叔 提交于 2020-03-04 07:21:48
/*
题目描述
令Pi表示第i个素数。现任给两个正整数M <= N <= 10000,请输出PM到PN的所有素数。

输入描述:
输入在一行中给出M和N,其间以空格分隔。


输出描述:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。

输入例子:
5 27

输出例子:
11 13 17 19 23 29 31 37 41 43
47 53 59 61 67 71 73 79 83 89
97 101 103
*/

#include<iostream>
#include<math.h>
using namespace std;

void find(int *p) //寻找素数并保存在数组内
{
    int flag, temp = 1; //flag用来标识是否为素数,temp指示数组下标, p[0]置空

    p[temp++] = 2;

    for(int i = 3; i < 150000; i++)
    {
        flag = 1;

        for(int j = 2; j <= sqrt(i); j++) //sqrt,开方函数,用于减少循环次数
        {
            if(i % j == 0)
            {
                flag = 0;
                break;
            }
        }

        if(flag == 1)
            p[temp++] = i;
    }
}

int main()
{
    int p[100000] = {}, M, N, temp = 1; //temp用来记录输出时每行个数

    cin >> M >> N;

    find(p); //调用函数

    for(int i = M; i <= N; i++)
    {
        if(temp % 10 != 0 && i != N)
        {
            cout << p[i] << " ";
            temp++;
        }
        else
        {
            cout << p[i] << endl;
			temp++;
        }
    }

    system("pause");

    return 0;
}

思路就是从3开始(2已经确定为素数并且已保存)逐个判断,判断是否能被其他小于其的所有整数整除,若能被整除则一定不是素数
但这么写就可能导致在提交的过程中出现运行超时的情况···
于是将判断条件由原先改成从2到该数的开方
原理摘自百度关于素数
嗯···大概就是这个样子

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!