最近找工作遇到很多手撕代码题,虽然很多题都有思路,但是短时间内手撕出来,且细节都到位,没有那么容易,本人小白一个,把遇到的问题及思路和解决方法写一下,供大家参考!
#include<iostream>
using namespace std;
int check(int n)
{
for (int j = 2; j < n; j++)//从2开始判断,范围为2~n-1
{
if (n%j == 0)
return 0;//2~n-1范围内,只要有一个能整除n,表示除了1和n本身之外还有因子,
//此时不是质数,直接返回0
}
return 1;//若2~n-1都不能整除n,表示n只能被1和自身整除,为质数,返回1
}
int main()
{
int N=0, count = 0;
cin >> N;
for (int i = 2;; i++)//注意从2开始判断,1不是质数也不是合数
{
if (check(i))//把下面的count判断放在if里面
{
count++; //先判断是不是质数,若是,计数+1
if (count > N) //每次计数+1后记得判断count是否达到预期值N
break;
else
cout << i << " ";
}
}
cout << endl;
return 0;
}
注意点:
1、待判断的数从2开始,判断是否为质数时也要从2开始判断
2、每次判断完一个数,要在if语句里面判断count的值是否达到上限N
3、关于优化问题,可以先把10以内的数倍数剔除(把2~10的倍数先剔除,然后从剩下的数中再判断)
水平有限,仅仅是一个小总结。