关于100-200素数求解

关于100-200素数求解

哈哈哈哈哈哈研究老半天到底怎么把代码块放进去。

~~还有这个一点也不人性化 ~~
我就比较喜欢把字体和颜色弄得不一样。
整成花里胡哨的样子。
这竟然不能改字体的大小和设置自己喜欢的颜色 。而且csdn里面有人说有用html才能改,想了想太累了,放弃了。只有黄色可以用,只好将就一下了。

正确的第一种

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{//100-200之间的素数

	int i = 0; int j = 0; int count = 0;
	for (i = 100; i <=200; i++)
	{
		for (j = 2; j < i; j++)
		{
			if (i%j == 0)//余数为0  即为整除的时候
				break;
		}
		//跳出来的时候有两种可能
		//不是素数跳出循环或者j>i(是素数)
		if (j >= i)
		{
			printf("%d\n", i);
			count++;
		}
	}
	printf("count=%d\n", count);
	system("pause");
    return 0;
}

关于count 刚开始没想到要加一个计数器
可是数字多了怎么知道写的对不对,于是计数器的作用就显现出来了。

关于改进

改进的思路一:
把j%sqrt(i)变j%sqrt(i*1.0)

for (j = 2; j<=sqrt(i); j++)

本来是想改一下
在这里插入图片描述

结果成这了 度娘说要这样

分析在C++中sqrt有三种类型,参数分别为double,float,long double。n定义的参数类型是int型,而sqrt()中应该试用double型或者float型,编译器不知道我们要调用哪一个sqrt类型。因此,修改为sqrt(i*1.0)

正确的第二种

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{//100-200之间的素数

	int i = 0; int j = 0; int count = 0;
	for (i = 100; i <=200; i++)
	{
		for (j = 2; j<sqrt(i*1.0); j++)
		{
			if (i%j == 0)//余数为0  即为整除的时候
				break;
		}
		//跳出来的时候有两种可能
		//不是素数跳出循环或者j>sqrt(i*1.0)(是素数)
		if (j >= sqrt(i*1.0))
		{
			printf("%d\n", i);
			count++;
		}
	}
	printf("count=%d\n", count);
	system("pause");
    return 0;
}

正确的第三种

改进的思路二:
把j%i变j%i/2

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{//100-200之间的素数

	int i = 0; int j = 0; int count = 0;
	for (i = 100; i <=200; i++)
	{
		for (j = 2; j<i/2; j++)
		{
			if (i%j == 0)//余数为0  即为整除的时候
				break;
		}
		//跳出来的时候有两种可能
		//不是素数跳出循环或者j>i/2(是素数)
		if (j >= i/2)
		{
			printf("%d\n", i);
			count++;
		}
	}
	printf("count=%d\n", count);
	system("pause");
    return 0;
}

把j%i变j%i/2
要改动两个地方
for (j = 2; j<i/2; j++)
if (j >= i/2)

其实改进的思路一和二本质上是一样的。都是试除法里面尽量减少循环的次数

正确的第四种

改进的思路三:

让奇数进入循环刚开始就砍一大半

for (i = 101; i <=200; i+=2)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{//100-200之间的素数

	int i = 0; int j = 0; int count = 0;
	for (i = 101; i <=200; i+=2)
	{
		for (j = 2; j<sqrt(i*1.0); j++)
		{
			if (i%j == 0)//余数为0  即为整除的时候
				break;
		}
		//跳出来的时候有两种可能
		//不是素数跳出循环或者j>sqrt(i*1.0)(是素数)
		if (j >= sqrt(i*1.0))
		{
			printf("%d\n", i);
			count++;
		}
	}
	printf("count=%d\n", count);
	system("pause");
    return 0;
}

指路

素数求解的n种境界
写的好的博客还挺多的 我就瞎捣鼓。

以下可忽略不看

全是本人写的时候的错误

这是第一个最开始的写法郑重声明这是错的
根本没有搞清楚循环跳出来的条件。放这个的原因就是警示自己。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
int main()
{//100-200之间的素数

	int i = 0;
	for (i = 100; i <= 200; i++)
	{
		int j = 0;
		for (j = 2; j <= i; j++)
		{
			if (i%j == 0)
				break;
		}
		printf("%d\n", i);

	}
	system("pause");
    return 0;
}

在这里插入图片描述
不知道脑子是短路了还是怎么了傻到==赋值都弄错哈哈哈哈哈哈
见笑了。

写在最后

写完了发现思路写的乱七八糟
也没有归类好
不过我自己还能看的懂
hhhhhhh我还要说一件超级搞笑的事情
Windows 10浏览器竟然不支持代码的所有复制
复制以后竟然会出现所有代码变成一行
我搞了老半天
倒是一点点的能复制
最后我人傻了
查了一下发现不止是我
于是弃了自带的浏览器
默默的把谷歌设置成默认了
然后发现换一个浏览器就好啦
哈哈哈哈哈哈哈

今天是2020-2-4
其实一直有看到很多厉害的人写博客
可是我呢 只是在心里暗自佩服
睡一觉起来 就完事了

后来怎么说呢 刚好也是因为疫情的原因 没办法出门
在家也不能干坐着
于是我就开始了第一篇博客试水
慢慢来喽

希望春天可以带来很多好消息!

武汉加油!
中国加油!

发布了2 篇原创文章 · 获赞 2 · 访问量 272

猜你喜欢

转载自blog.csdn.net/weixin_45271990/article/details/104166408