素数的知识:
定义
(1)除了能被1和自身整除,不能被其他数整除的数
(2)大于1的数
技巧
判断一个数是否是素数,除到其平方根就可以了,因为如果一个数不是素数,那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,一个小于或等于它的平方根.并且成对出现.
素数的代码题:
判断1001--2000之间有多少个素数,并输出所有素数。
暴力解法
C++:
#include <iostream>
using namespace std;
int main() {
int tag;//标记该数是否为素数
int count = 0;
for (int i = 1001; i < 2001; i++) {
tag = 0;
for (int j = 2; j < i; j++) { //判断该数能否被其他数整除
if (i % j == 0) { //该数不是素数
tag = 1;
break;
}
}
if (tag == 0) { //该数是素数
count++;
cout << i << ' '; //输出该素数
}
}
cout << endl;
cout << "一共有" << count << "个素数" << endl; //输出素数的个数
return 0;
}
输出:
C:
#include <stdio.h>
int main() {
int tag;//标记该数是否为素数
int count = 0;
for (int i = 1001; i < 2001; i++) {
tag = 0;
for (int j = 2; j < i; j++) {//判断该数能否被其他数整除
if (i % j == 0) {//该数不是素数
tag = 1;
break;
}
}
if (tag == 0) {//该数是素数
count++;
printf("%d ", i);
}
}
printf("\n");
printf("一共有%d个素数\n",count);
return 0;
}
优化解法
C++:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int i,j,count = 0;
for (i = 1001; i < 2001; i++) {
for (j = 2; j <= sqrt(i); j++) { //判断该数能否被平方根之前(包括平方根)的数整除
if (i % j == 0) { //平方根之前(包括平方根)的数能被整除,该数不是素数
break;
}
}
//for循环出来之后说明i的平方根之前的数都不能被整除,那自然平方根之后的都不能被整除(因子成对出现)
if (j > sqrt(i)) { //该数是素数
count++;
cout << i << ' '; //输出该素数
}
}
cout << endl;
cout << "一共有" << count << "个素数" << endl; //输出素数的个数
return 0;
}
C:
#include <stdio.h>
#include <math.h>
using namespace std;
int main() {
int i,j,count = 0;
for (i = 1001; i < 2001; i++) {
for (j = 2; j <= sqrt(i); j++) { //判断该数能否被平方根之前(包括平方根)的数整除
if (i % j == 0) { //若该数能被平方根之前(包括平方根)的数整除,该数不是素数
break;
}
}
if (j > sqrt(i)) { //该数是素数
count++;
printf("%d ", i); //输出该素数
}
}
printf("\n");
printf("一共有%d个素数\n", count); //输出素数的个数
return 0;
}