//素数的定义:质数(prime number)又称素数,有无限个。一个大于1的自然数,
//除了1和它本身外,不能被其他自然数(质数)整除,
//换句话说就是该数除了1和它本身以外不再有其他的因数;
//否则称为合数。根据算术基本定理,每一个比1大的整数,
//要么本身是一个质数,要么可以写成一系列质数的乘积;
//而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。
//最小的质数是2
第一种境界:试除法
#include<stdio.h>
int main() {//第一种方法
int i = 0;
int counter = 0;
for (i = 100; i <= 200;i++) {//判断i是否为素数,试除法,产生2到i-1的数
int j = 0;
for (j = 2; j < i;j++) {//产生2到i-1的数
if (i%j==0) {//不是素数
break;
}
}
if (j == i) {// 说明我们已经把2到i-1的数都已经试除了 是素数
printf("%d ",i);
counter++;
}
}
printf("\ncounter=%d\n",counter);
}
第二种境界:偶数中找素数
#include<stdio.h>
int main() {//第二种方法
int i = 0;
int counter = 0;
for (i = 101; i <= 200;i+=2) {//偶数肯定不是素数,所以在奇数里面找素数
int j = 0;
for (j = 2; j < i;j++) {
if (i%j==0) {//不是素数
break;
}
}
if (j == i) {// 说明我们已经把2到i-1的数都已经试除了 是素数
printf("%d ",i);
counter++;
}
}
printf("\ncounter=%d\n",counter);
}
第三种境界:i=a*b,a或b至少有一个数字<=sqrt(i)
#include<stdio.h>
#include<math.h>
int main() {//第三种
int i = 0;
int counter = 0;
for (i = 101; i <= 200;i+=2) {//i=a*b,a或b至少有一个数字<=sqrt(i)
//例如:16=2*8=4*4
int j = 0;
for (j = 2; j <=sqrt(i);j++) {
if (i%j==0) {//不是素数
break;
}
}
if (j >sqrt(i)) {//是素数
printf("%d ",i);
counter++;
}
}
printf("\ncounter=%d\n",counter);
}
第四种境界:除了2以外,所有可能的质因数都是奇数,所以,就先尝试2,然后从3开始,直到x/2的所有奇数。
#include<stdio.h>
int main(){//第四种
int i = 0;
int j = 0;
int count = 0;
for (i = 101; i <= 200; i += 2)
{
for (j = 2; j < i / 2; j++)
{
if (i % j == 0)
break;
}
if (j == i / 2)
{
printf("%d是素数\n", i);
count++;
}
}
printf("%d\n", count);
return 0;
}
第五种境界:(1) 先将1挖掉(因为1不是素数)。
(2)用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。
(3)用3去除它后面的各数,把3的倍数挖掉。
(4)分别用5…各数作为除数去除这些数以后的各数。
上述操作需要一个很大的容器去装载所有数的集合,只要满足上述条件,即2的倍数大于1的全部置0,3的倍数大于1的全部置0,4的倍数大于1的全部置0…一直到这个数据集合的末尾,这样一来不为0的数就是素数了,然后按下标在里面进行查找就好了。
#include<stdio.h>
int main(){//第五种
int i = 9;
int j = 0;
int arr[100];
int count = 0;
for (i = 0; i < 100; ++i)
{
arr[i] = i + 1;
}
for (i = 0; i < 100; ++i)
{
j = i - 1;//空过0、1、2
while (j > 1)
{
if (arr[i] % j == 0)
arr[i] = 0;
j = j - 1;
}
}
for (j = 1; j < 100; ++j)
{
if (arr[j] != 0)
{
printf("%d是素数\n", arr[j]);
count++;
}
}
printf("%d\n", count);
return 0;
}
-------第五个境界是我采纳别人的,今天的求解素数到这里了,谢谢!!!-------