令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。
输入格式:
输入在一行中给出M和N,其间以空格分隔。
输出格式:
输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。
一开始总有一个用例错误,百思不得其解,后来把素数判断函数又给优化了一下,加入了double 去除了flag,最终通过,但是用时和开辟空间较大。
总结:再次掌握素数的判断、末尾空格及换行用flag的写法,memset的用法
#include <iostream>
#include<cmath>
#include<string>
using namespace std;
bool prime(int num)
{
int i;
for(i = 2;i <=sqrt((double)num);i++ )
if(num % i == 0)
return false;
return true;
}
int main()
{
int m,n;
int j = 3;//计数到10000
int current = 4,count = 0;
int q;
int prime_storage[1000000];//z
int flag = false;//末尾分号存在
memset(prime_storage,0,sizeof(prime_storage));
cin>>m>>n;
prime_storage[1] = 2;//1不是素数
prime_storage[2] = 3;
while(j <= 10000)
{
if(prime(current))
prime_storage[j++] = current;
current++;
}
for(q = m;q <= n;q++)//末尾没有空格的写法,用flag标签,
{
if(count!=0 && count%10 == 0)
{
cout<<endl;
flag = false;
}
if(flag)
cout<<" ";
else
flag = true;
cout<<prime_storage[q];
count++;
}
return 0;
}