题目描述
输入两个正整数m和n,输出m和n之间的所有素数。
要求程序定义一个prime()函数和一个main()函数,prime()函数判断一个整数n是否是素数,其余功能在main()函数中实现。
int prime(int n)
{
//判断n是否为素数, 若n为素数,本函数返回1,否则返回0
}
对于C/C++代码的提交,本题要求必须通过定义prime函数和main函数实现,否则,提交编译错误,要提交完整的程序。
输入
输入两个正整数m和n,m<=n,且都在int范围内。
输出
输出占一行。输出m和n之间的所有素数,每个数后有一个空格。测试数据保证m到n之间一定有素数。
样例输入 Copy
2 6
样例输出 Copy
2 3 5
这个方便理解但是在运行时会有较长的时间
#include<stdio.h>
int prime(int n) {
int i;
if(n==1)//不能忘记n==1时 1不是素数故输出return 0
return 0;
for(i=2;i<n;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int i,n,m,b,flag=0;
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
{
b=prime(i);
if(b==1 && flag==0)//第一次要使flag的值改变
{
printf("%d ",i);
flag=1;
continue;//会执行完后结束这一次的 下面的语句不再执行 直接执行下一次循环
}
if(b==1)
printf("%d ",i);
}
if(flag==0)//这个是在m 和 n之间没有素数时 循环中的语句都不执行所以flag的值不变
printf("No Answer");
}
这个就缩短了运行的时间
#include<stdio.h>
#include<math.h>
int prime(int n)
{
int i,a;
if(n==1)
return 0;
a=(int)sqrt(n);
for(i=2;i<=a;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int i,n,m,b,flag=0;
scanf("%d%d",&m,&n);
for(i=m;i<=n;i++)
{
b=prime(i);
if(b==1 && flag==0)
{
printf("%d ",i);
flag=1;
continue;
}
if(b==1)
printf("%d ",i);
}
if(flag==0)
printf("No Answer");
}
总结:以上两个程序之只有在prime函数中的关于素数的判断方法不同 一个便于理解 一个是简短了程序的时长 两个程序对比看能较快的看懂程序的内容 并理解