关于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
其实一直有看到很多厉害的人写博客
可是我呢 只是在心里暗自佩服
睡一觉起来 就完事了
后来怎么说呢 刚好也是因为疫情的原因 没办法出门
在家也不能干坐着
于是我就开始了第一篇博客试水
慢慢来喽
希望春天可以带来很多好消息!
武汉加油!
中国加油!