/*
问题及代码:
*Copyright(c)2014,烟台大学计算学院
*All rights reserved.
*文件名称:test.cpp
*作者:陈银丽
*完成日期:2016年4月4日
*版本号:v1.0
*
*问题描述:输出所有小于等于n(n 为一个大于2的正整数)的素数。 要求(1)每行输出10个素数;(2)尽可能采用较优的算法
*输入描述:
*程序输出:
*/
#include <stdio.h>
#include <math.h>
#include <iostream>
bool prime(int n) //判断正整数n是否为素数
{
int i;
for (i=2;i<=(int)sqrt(n);i++)
if (n%i==0)
return false; //若n不是素数,则退出并返回false
return true;
}
void main()
{
int n,i,j=0; //j用于累计素数个数
printf("n:");
scanf("%d",&n);
printf("小于等于%d的素数:\n",n);
if (n>2)
{ printf("%4d",2);
j++;
}
for (i=3;i<=n;i+=2)
if (prime(i))
{ printf("%4d",i);
if (j!=0 && ++j%10==0) //每行最多显示10个素数
printf("\n");
}
printf("\n");
system("pause");
}
运行结果:
学习心得:在满足设计要求的前提之下,还需要考虑算法的时间复杂度,尽可能要最优。