西工大2019年计算机机试第四题:找素数(递归法)
作者:互联网
问题:
从M开始找到第n个质数;
例如输入: 4 3
输出:5 7 11
分析:
问题的关键在于素数的判断。
想法:先定义一个函数判断一个数是否为素数,通过for循环判断(只能被1和本身整除的数);再构造一个递归函数,功能是找出从m开始(包含m)n个素数。递归函数中调用判定素数函数,弱一个数是素数的话,输出到控制台上,同时素数数量减1,本身加1,接着往下找。
代码:
#include<iostream>
using namespace std;
bool flag = true; //初始化为true
bool judge(int m) //布尔类型,判定是否是素数,素数为true,非素数为false
{
if (m <= 1) //最小素数为2,
flag = false;
else if (m == 2)
flag = true;
else if (m > 2) //素数定义来判断是否为素数
{
for (int i = 2; i < m; i++)//循环判断是否为素数
{
if (m % i == 0)
{
flag = false;
break; //非素数直接退出本层循环,不再进行以后的判断
}
else
flag = true; //素数返回true
}
}
return flag; //返回素数判定标志
}
void search(int m,int n) //递归函数,寻找素数个数,从m开始找出n个素数
{
if (n <= 0) //直接返回,作为寻找完毕的判定条件
{
return;
}
if (judge(m)) //素数判定标志,条件为真则执行if中语句
{
cout << m <<" "; //输出
n--; //素数个数减1
m++; //寻找m下一位
}
else //非素数
{
m++; //接着寻找下一位
}
search(m, n); //递归
}
int main()
{
int m,n;
cin >> m>>n;
search(m, n); //递归调用
return 0;
}
现在感觉递归能代替某些条件下的循环,降低程序时间复杂度。
标签:判断,递归函数,int,西工大,flag,素数,2019,机试,true 来源: https://blog.csdn.net/Crazy__1/article/details/88750064