三种方法显示0~100以内的质数-第四个程序20200610

	闲话不多说,直接写代码。

方法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;
}

程序运行结果如下图
方法1运行结果

方法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;
}

程序运行结果如下图
方法2运行结果

方法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;
}

程序运行结果如下图
方法3运行结果

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值