#9686: 會發生 記憶體區段錯誤! Dev-C++就可執行 問題出在哪


s56565566123 (akali)


#include <iostream>
#include <cstdlib>
#include <cstring> 

using namespace std;
int main(void){
int num;
bool A[50000];
int B[5000]; 
for(int i=0;i<50000;i++){
A[i]=false; 
B[1]=2;
B[2]=3;
B[3]=5;
int a=6;
bool ok=true;
int i=3;
while(i<5000){
ok=true;
for(int j=1;j<=i;j++){
if(a % B[j]==0){
ok=false;
break;
}
}
if(ok==true){
B[i+1]=a;
i++;
}
a++;
}
for(int j=1;j<5000;j++){
A[B[j]]=true;
}

while(scanf("%d",&num)!=EOF){
if(A[num]==true){
printf("質數\n"); 
}else{
printf("非質數\n"); 
}

return 0;

}
#9690: Re:會發生 記憶體區段錯誤! Dev-C++就可執行 問題出在哪


m80126colin (許胖)


#include
#include
#include  

using namespace std;
int main(void){
int num;
bool A[50000];
int B[5000]; 
for(int i=0;i<50000;i++){
A[i]=false; 
B[1]=2;
B[2]=3;
B[3]=5;
int a=6;
bool ok=true;
int i=3;
while(i<5000){
ok=true;
for(int j=1;j<=i;j++){
if(a % B[j]==0){
ok=false;
break;
}
}
if(ok==true){
B[i+1]=a;
i++;
}
a++;
}
for(int j=1;j<5000;j++){
A[B[j]]=true;
}

while(scanf("%d",&num)!=EOF){
if(A[num]==true){
printf("質數\n"); 
}else{
printf("非質數\n"); 
}

return 0;

}

 


為何是 5000 和 50000?

 

 

試試看 2100000000 

#9695: Re:會發生 記憶體區段錯誤! Dev-C++就可執行 問題出在哪


a12345678665 (marktohark)


#include
#include
#include  

using namespace std;
int main(void){
int num;
bool A[50000];
int B[5000]; 
for(int i=0;i<50000;i++){
A[i]=false; 
B[1]=2;
B[2]=3;
B[3]=5;
int a=6;
bool ok=true;
int i=3;
while(i<5000){
ok=true;
for(int j=1;j<=i;j++){
if(a % B[j]==0){
ok=false;
break;
}
}
if(ok==true){
B[i+1]=a;
i++;
}
a++;
}
for(int j=1;j<5000;j++){
A[B[j]]=true;
}

while(scanf("%d",&num)!=EOF){
if(A[num]==true){
printf("質數\n"); 
}else{
printf("非質數\n"); 
}

return 0;

}

 


我測試過了

 

在這網站上的for(int i=0 ;i<??;i++)

在這網站上是會錯誤的

請改成

int i;

for(i=0;i<??;i++)