闲话不多说,直接写代码。
方法1
#include<stdio.h>
#include<stdlib.h>
//输出0~100以内的质数 方法1
int main()
{
int num=1,a,b,i;i
double x,y;
printf("方法1\n");
printf("100以内的素数有:");
printf(" 2 ");//因为下述算法不能包含2,所以提前显示
x = 3.0;//初始化值为3,程序从3开始计算每个值是否为质数
do
{
i = 2;//将i初始化为2
do
{
y = x / i;//应为y是double型数据,所以在x不能被i整除时,y的值为小数
a = (int)y;//取y的整数部分赋值给a
if (y != a)//如果y和a不相等,则执行
{
if ((x-1)==i)//在y和a不相等当的前提下,程序执行到i的值等于x-1时,也就是内层do-while循环程序最后一次执行时,输出显示质数。
{
b = x;//将double型的x的值赋值给整型的b
printf(" %d ", b);//显示b的值
num++;//num的值增加1 记录质数的个数
}
}
i++;//i的值增加1
} while (y!=a);//如果y和a不相等,则执行
x++;//x的值增加1
} while (x<100);//如果x小于100,则执行
printf("\n");//换行
printf("100以内的素数有 %d 个。\n",num);//显示
system("pause");//程序暂停
return 0;
}
程序运行结果如下图
方法2
#include<stdio.h>
#include<stdlib.h>
//输出0~100以内的质数 方法2
int main()
{
int num = 0;//记录质数的个数
printf("方法2\n");
printf("100以内的素数有:");
for (int i = 1; i < 100; i++)
{
int x=0;//记录i被j整除的次数
for (int j = 1; j <= i; j++)
{
if (i%j==0)//如果i能被j整除
{
x++;//则x的值增1
}
}
if (x == 2)//如果x=2则表示,i只能被1和它自身整除
{
printf(" %d ", i);//则输出质数i
num++;//记录质数的个数
}
}
printf("\n");//换行
printf("100以内的素数有 %d 个。\n", num);//显示
system("pause");//程序暂停
return 0;
}
程序运行结果如下图
方法3
#include<stdio.h>
#include<stdlib.h>
//输出0~100以内的质数 方法3
int main()
{
int arr[100],num=0;//定义一个大小为100的整型数组arr
printf("方法3\n");
printf("100以内的素数有:");
for (int i = 0; i < 100; i++)
{
arr[i] = 1;//将数组内所有的元素的值赋值为1
}
for (int i = 2; i < 100; i++)
{
if (i%2==0)//将数组下标为偶数的元素的值赋值为0
{
arr[i] = 0;
}
if (i%2!=0)
{
for (int j = 2; j <= 100 / i; j++)//将由两个数相乘得到的下标的值赋值为0
{
arr[i*j] = 0;
}
}
arr[1] = 0;//排除arr[1]这个干扰项
arr[2] = 1;//将2添加到质数数列内
if (arr[i]==1)//将筛选出来的质数下标打印出来
{
printf(" %d ", i);
num++;//记录质数的个数
}
}
printf("\n");//换行
printf("100以内的素数有 %d 个。\n", num);//显示
system("pause");//程序暂停
return 0;
}
程序运行结果如下图