首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手求教。打素数表遇到个诡异的有关问题。

2013-02-27 
新手求教。。打素数表遇到个诡异的问题。。。有一段是这样的for(i2iMAXi++)for(j2j*iMAXj++)//ji???pr

新手求教。。打素数表遇到个诡异的问题。。。
有一段是这样的
for(i=2;i<MAX;i++)
        for(j=2;j*i<MAX;j++)//j=i???
                prime[j*i]=0;
我以为,把第二行的j=2,改成j=i会提高效率,结果运行时却提示“该内存不能为"written"”
百思不解。。。求高手解释下原因,感激不尽~~~

附下我的完整代码:
#include<cstdio>
#include<cstdlib>
#define MAX 100000
using namespace std;
int main()
{
    long a,d,n,i,j;
    bool *flag=(bool *)malloc(MAX*sizeof(bool));

    flag[1]=0;
    for(i=2;i<MAX;i++)
        flag[i]=1;
    for(i=2;i<MAX;i++){
        for(j=2;j*i<MAX;j++){
                flag[j*i]=0;
            }
        }
    while(scanf("%ld%ld%ld",&a,&d,&n)!=EOF){
        if(a==0&&d==0) break;
        while(n){
            if(flag[a]==1)
                n--;
            a+=d;
        }
        printf("%ld\n",a-d);
    }
    free(flag);

    return 0;
} 算法 素数
[解决办法]
我以为,把第二行的j=2,改成j=i会提高效率,结果运行时却提示“该内存不能为"written"”

 i == j时,,当 i很大时,== 10000吧  j*i的值 很很大,那么    prime[10000 * 10000] = 0; 果断越界

越界会发生什么,不可知
[解决办法]
flag只分配了MAX的内存,你却要读MAX*MAX范围的数据
[解决办法]
是哪行报的异常?

热点排行