/*
题目描述
令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到该数的开方
原理摘自百度
嗯···大概就是这个样子
来源:CSDN
作者:Runa乀丛雨様
链接:https://blog.csdn.net/Sakura_Sora/article/details/104628206