问题1:用C语言求出100以内的素数。
分析:素数,即质数,是指只可以被1和本身整除的数。此时可以考虑用循环的方法来用这个数除以所有100以内的数,若存在余数为0的情况,则说明该数不是素数;此外,该数在100以内的取值用另外一层循环,即用嵌套循坏实现。
实现代码如下:
#include <stdio.h>
int main(){
int x;
for (x=2; x<100; x++){
int i;
int Isprime = 1; //标识符,用来判断余数为0的情况是否存在
for (i=2;i<x;i++){
if (x % i == 0){
Isprime= 0;
break; //如存在余数为0的一种情况,即跳出此处for循环
}
}
if (Isprime == 1){
printf("%d\n",x); //将素数注意打印出来
}
}
// printf("\n"); //打印出来的内容末尾行换行
return 0;
}
运行上述代码,结果如下图所示,即求出了100以内的所有素数。
其实,为了更好显示结果,可以将上述代码中的printf(“%d\n”,x); 更改为printf("%d ",x);,即在%d后加一个空格显示。
问题2:用C语言求出前50个自然数中的的素数。
分析:基于上例,此时外层的循环条件变成了计素数的个数了,即素数个数小于50。此时,可以用while循环控制条件实现,具体实现代码如下:
#include <stdio.h>
int main(){
int x = 2;
int count = 0;
// for (x=2; x<100; x++){
while (count<50){
int i;
int Isprime = 1; //标识符,用来判断余数为0的情况是否存在
for (i=2;i<x;i++){
if (x % i == 0){
Isprime= 0;
break; //如存在余数为0的一种情况,即跳出此处for循环
}
}
if (Isprime == 1){
printf("%d ",x); //将素数注意打印出来
count++; //count计数条件
}
x++; //外层循环的条件
}
// printf("\n");
return 0;
}
同理,在编译器中运行代码得到如下结果,即实现了获取自然数前50个素数。
其实,由于for 循环和while循环是可以进行等效替换的,因此上述求自然数前50个素数的代码还可以直接for嵌套循环来完成,具体实现代码如下:
#include <stdio.h>
int main(){
int x = 2;
int count = 0;
for (x=2; count<50; x++){
int i;
int Isprime = 1; //标识符,用来判断余数为0的情况是否存在
for (i=2;i<x;i++){
if (x % i == 0){
Isprime= 0;
break; //如存在余数为0的一种情况,即跳出此处for循环
}
}
if (Isprime == 1){
printf("%d ",x); //将素数注意打印出来
count++; //count计数条件
}
// x++; //外层循环的条件
}
// printf("\n");
return 0;
}
上述代码也可以得到正确的结果,实际上for循环的参数是比较灵活的,不一定是循环进行的参数,但是为了代码的规范性和可读性,一般会在for里面写同一个参数的循环条件。