输入两个正整数m和n(m<=n),输出m和n之间的全部素数。
输入示例:
1 3
输出示例:
2 3(后有一空格)
输入示例:
5 10
输出示例:
5 7(后有一空格)
//本代码仅供参考,了解解题思路,代码并非最佳,请尝试优化
#include<>
int isprime(int n);
int main()
{
int m,n;
scanf("%d%d", &m,&n);
for (int i = m; i <= n; i++) //用for循环遍历两个整数之间的数
{
if (isprime(i)) //调用函数
{
printf("%d ", i);
}
}
return 0;
}
int isprime(int n)
{
int ret = 1;
if (n == 2) //处理特殊值
{
ret = 1;
}
if (n < 2)
{
ret = 0;
}
for (int i = 2; i < n / 2; i++) //判断是否为素数
{
if (n % i == 0)
ret = 0;
}
return ret; //单一出口原则
}
在拿到这条题时,要注意,
1不是素数,2是素数。而这些都是已知条件,可以直接用if语句,将其先提出来。
那么在for循环语句中,i 一定不能小于二,而条件语句中的 “i<n/2”也可以用“i<n”,但因为素数总是成对存在的,所以这里除于2 只是减少了它 的计算量,在一定程度上,减少了它的计算时间和内存占用吧!但,总的来说,影响不大。
在定义函数的表达式中,有两种表达方式
一种是 不定义 “ret”变量 ,而是在if条件语句中,直接return 0;或者return 1;但这种方法在一些大型程序中 ,对于新手进行调试 较不方便。但这种方法,可以不用在最后再重复return 进行。
另一种 是先定义一个 变量 a ,充当工具人 然后,如果是 另它 等于 1或者0;最后再return a;在调试时更容易查看错误在哪里。
两种方法更有它的优势,因人而异,绝不存在哪种方法更加高级,看你对哪种方法更感兴趣吧。