关于查寻质数最高效、最快捷的算法
关于查找质数最高效、最快捷的算法
这是一版在固定范围内查找质数最牛叉的算法,但程序运行时却出现一个很奇怪的现象:在我的电脑上,这段代码不报任何错但没有任何运行结果,可是如果我把宏定义【bianjie】的值改的比较小一点,比如60,那么程序就可以正常打印出结果:
请问网友这是什么原因造成的?无法回答的话,请把上面那段代码复制在您的机器上运行,看是否有结果显示。
------解决方案--------------------
while(p<&sieve[bianjie])
p+=number,*p=0;
判断了p没有越界,但不能保证p+number没有越界,在执行*p=0会可能因为越界写入到相邻的局部变量。
------解决方案--------------------
那就是更悲剧的代码段的地址被你的p修改掉了
但是 lz 你的程序在你电脑上你能运行处结果, 在我的电脑上是直接挂掉的

应该改为
------解决方案--------------------
跟代码段无关,问题就在于数组越界和楼主毫不在乎的“那个未知的神秘内存”
简单跟踪了一下,虽然没有仔细分析栈中每个数据的意义,但从该位置修改前的数值来看存放的应该是ESP(栈顶指针),这个数值被修改,使得筛法查找质数这个循环结束后数据出栈时位置错乱,而楼主的集成编译环境又不怎么给力,不报错直接结束了整个程序
------解决方案--------------------
个人感觉查表法才是最快的方法
------解决方案--------------------
Finding prime numbers - Kenneth Haugland
Different schemas for finding prime numbers explained with code
http://www.codeproject.com/Article.aspx?tag=198374988322054872&
------解决方案--------------------
23L的观点有失偏颇哦。
主攻编程的话,稍微像样点的资料都是英文的。
#include "stdio.h"
#define bianjie 70
void main()
{
char sieve[bianjie];
char *p;
int number;
for(p=sieve;p<&sieve[bianjie];) *p++=1;
for(number=3; ; number+=2)
{
p=&sieve[0]+(number-3)/2;
if(p>=&sieve[bianjie]) break;
while(p<&sieve[bianjie])
p+=number,*p=0;
}
printf("2\n");
for(number=3,p=sieve; p<&sieve[bianjie]; number+=2,p++)
if(*p!=0)
printf("%d\n",number);
}
这是一版在固定范围内查找质数最牛叉的算法,但程序运行时却出现一个很奇怪的现象:在我的电脑上,这段代码不报任何错但没有任何运行结果,可是如果我把宏定义【bianjie】的值改的比较小一点,比如60,那么程序就可以正常打印出结果:
请问网友这是什么原因造成的?无法回答的话,请把上面那段代码复制在您的机器上运行,看是否有结果显示。
------解决方案--------------------
while(p<&sieve[bianjie])
p+=number,*p=0;
判断了p没有越界,但不能保证p+number没有越界,在执行*p=0会可能因为越界写入到相邻的局部变量。
------解决方案--------------------
那就是更悲剧的代码段的地址被你的p修改掉了
但是 lz 你的程序在你电脑上你能运行处结果, 在我的电脑上是直接挂掉的
while(p<&sieve[bianjie])
p+=number,*p=0;
应该改为
while(p<&sieve[bianjie])才有正确结果
{
p+=number;
if (p<&sieve[bianjie])
{
*p=0;
}
}
------解决方案--------------------
跟代码段无关,问题就在于数组越界和楼主毫不在乎的“那个未知的神秘内存”
简单跟踪了一下,虽然没有仔细分析栈中每个数据的意义,但从该位置修改前的数值来看存放的应该是ESP(栈顶指针),这个数值被修改,使得筛法查找质数这个循环结束后数据出栈时位置错乱,而楼主的集成编译环境又不怎么给力,不报错直接结束了整个程序
------解决方案--------------------
个人感觉查表法才是最快的方法
------解决方案--------------------
Finding prime numbers - Kenneth Haugland
Different schemas for finding prime numbers explained with code
http://www.codeproject.com/Article.aspx?tag=198374988322054872&
------解决方案--------------------
23L的观点有失偏颇哦。
主攻编程的话,稍微像样点的资料都是英文的。