我写的筛选质数的思路是:
1.先生成2到NUM直接的全部整数(代码上面哪个注释写错了,没改过来)
2.第一层循环 从2循环到上一步生成的数组成员总数,自增变量为m。第二层循环是遍历从1到m,自增变量是n。
3.在第二次循环中如果arr[m]%arr[n]==0,那么arr[m]就是非质数,此时让flag=1来标记arr[m]。
4.判断flag的数值,如果是0,则表示arr[m]为质数,并进行输出
/**
* File Name: zhishu.c
* Author: Haoxuan
* Mail: haovxuan@126.com
* Created Time: 2020年12月20日 星期日 18时49分55秒
**/
#include
#define NUM 802
int main()
{
int arr[NUM];
int n;
printf("xxxxx质数筛选xxxxxx\n");
//生成从1到NUM的数组
for(int i=2;i<NUM;i++)
arr[i]=i;
for(int m=2;m<sizeof(arr)/sizeof(arr[0]);m++)
{
if(arr[m]==1)
continue;
int flag=0;
for(n=1;n<m;n++)
{
if(arr[m]%arr[n]==0){
flag=1;
break;
}
}
if(flag==0)
printf("%d ",arr[m]);
}
printf("\n");
return 0;
}
我遇到了一个问题
当NUM>802的时候,报了错。如果小于等于802就没有这个问题。
报错:Floating point exception (core dumped)
关于这个问题老师给我的回复
这是因为在目前的机器环境上,按照我定义的数组的存储类型,存放数组的位置只能开销出这么大的空间,数组再大就会引起存储破裂,比如auto的数组放在栈上,栈上的空间是有上限值的,最多能够放一个802的整型数组这么大,再大就引起栈破裂了。
怎么去解决这个问题
这个程序在我的机器环境上跑有问题,换一台不一定就会有问题,至于解决的方法:宗旨是更改数组存放的位置,比如定义的时候用static,或者整个程序用动态内存管理的思路做。
或者用命令查看目前机器环境上每个进程的虚拟空间中目前默认的栈大小,再用相应的命令将栈空间改大。
要么换位置存,要么将当前所用的位置改大。
另外一种方法
© 版权声明
转载请注明出处,并标明原文链接。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
THE END
暂无评论内容