您的位置:首页 > 其它

1013. 数素数 (20)

2018-02-26 12:15 369 查看


【前提】首先要掌握判断素数的函数。
【例】假定有一个数组,编写程序判定里面的数是否为素数并输出。
#include <iostream>
using namespace std;
bool isPrime(int num)
{
if(num == 2)
return true;
for(int i=2;i*i<=num;i++)
{
if(num%i == 0)
return false;
}
return true;
}
int main()
{
int a[7] = {2,3,4,5,6,13,15};
for(int i=0;i<7;i++)
{
bool b = isPrime(a[i]);
if(b)
cout << a[i] << " is a prime number." << endl;
else
cout << a[i] << " is not a prime number." << endl;
}
return 0;
}
运行结果:



【思路】之前的思路是开辟一个数组,接收第1到第10000个素数。然后根据输入的区间输出区间内对应的素数,可是不管怎么修改只得到20分中的19分。
提交的C++代码如下(19/20):
#include <iostream>
using namespace std;
int a[10000];
bool isPrime(int num)
{
if(num == 2)
return true;
for(int i=2;i*i<=num;i++)
{
if(num%i == 0)
return false;
}
return true;
}
int main()
{
int i=0,count=0;
int start,end;
for(int j=2;j<10000;j++)
{
if(isPrime(j))
a[i++] = j;
}
cin >> start >> end;
for(int i=start-1;i<end;i++)
{
count++;
if(count%10 == 0)
{
cout << a[i];
cout << endl;
}
else
{
if(i==end-1)
cout << a[i];
else
cout << a[i] << " ";
}
}
return 0;
}

    过后修改了以下思路:不额外开辟数组,设置一个计数器count计算素数的个数。在一个for循环内(for循环不设置变量的上界,而是通过判断计数器是否大于给定区间的上限从而终止循环),在计数器count没达到给定区间下限的情况下仅执行自增操作,落到区间范围内时才判断输出的格式进行对应的输出。
满分的C++代码如下:
#include <iostream>
using namespace std;
bool isPrime(int num)
{
if(num == 2)
return true;
for(int i=2;i*i<=num;i++)
{
if(num%i == 0)
return false;
}
return true;
}
int main()
{
int count=0;
int start,end;
cin >> start >> end;
for(int j=2;;j++)
{
if(isPrime(j))
{
count++; //当第i个数不在所求[start,end]范围内时仅执行次数自增操作
if(count>=start && count<=end)
{
if((count-start+1)%10 == 0) //当输出元素是10个倍数时候附带换行
cout << j << endl;
else if(count!=end) //当未达到最后一个元素且不是第10的倍数时候附加空格
cout << j << " ";
else //输出元素为最后一个元素时不带空格
cout << j;
}
}
if(count>end) //当超过了指定的最后一个数即可退出循环
break;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: