一開始想的是把所有素?cái)?shù)存到數(shù)組按照下標(biāo)輸出疚鲤,后來在網(wǎng)上看到了更好的思路
#include <iostream>
#include <cmath>
using namespace std;
/*
* 利用一個定理——如果一個數(shù)是合數(shù),那么它的最小質(zhì)因數(shù)肯定小于等于他的平方根。
* 例如:50越走,最小質(zhì)因數(shù)是2,2<50的開根號
* 再比如:15赔硫,最小質(zhì)因數(shù)是3滨达,3<15的開根號
* */
int prime(int n) {
for (int i = 2; i <= sqrt(n); i++) //根據(jù)定理,從2到該數(shù)的平方根陨献,若取余為0的話盒犹,則不為質(zhì)數(shù),否則為質(zhì)數(shù)
if (n % i == 0)
return 0;
return 1;
}
int main() {
int n, m;
int num = 0; //num為第幾個質(zhì)數(shù)
int k = 0; //k為符合題意的第幾個質(zhì)數(shù)
int f = 1; //標(biāo)記變量
scanf("%d%d", &n, &m);
int i = 2;
while (f) {
if (prime(i)) {
num++;
if ((num >= n) && (num < m)) {
k++;
if (k % 10 == 0) //該數(shù)為10的倍數(shù)眨业,輸出時換行
printf("%d\n", i);
else
printf("%d ", i); //該數(shù)不是10的倍數(shù)急膀,輸出時空格
}
if (num == m) { //該數(shù)為最后一個數(shù),輸出后換行龄捡,并且標(biāo)記變量變?yōu)?
printf("%d\n", i);
f = 0;
}
}
i++;
}
return 0;
}