#15977: 有先建表,編譯也沒有錯,但為什麼跑不動?大師求解!⊙△⊙╯


timmy940410 (遊艇)

學校 : 臺北市私立延平高級中學
編號 : 69053
來源 : [122.116.197.27]
最後登入時間 :
2021-02-19 11:39:00
a007. 判斷質數 | From: [114.32.213.13] | 發表日期 : 2018-11-09 21:03

#include<iostream>
#include<math.h>
using namespace std;
int prime(long long int a[5000]={0}){
int k=1;
a[0]=2;
for(int i=3;i<50000;i++){
int flag=0;
for(int j=2;j<=sqrt(i);j+=2){
if(i%j==0){
flag=1;
break;
}
}
if(flag==0){
a[k]=i;
k++;
}
}
return a[5000];
}
int main(){
long long int n,a[5000];
a[5000]=prime(a);
while(cin>>n){
int flag=0;
for(int i=2;i<5000;i++){
if(a[i]==0){
break;
}else if(n%a[i]==0){
flag=1;
break;
}else if(a[i]>=n){
flag=1;
break;
}
}
if(flag==0) cout<<"質數";
else cout<<"非質數";
cout<<"\n";
}
}

 
#15980: Re:有先建表,編譯也沒有錯,但為什麼跑不動?大師求解!⊙△⊙╯


inversion (「我們所認識的可符香是個像天使的好女孩」之葉林 *Cries...)

學校 : 國立清華大學
編號 : 43537
來源 : [49.159.6.107]
最後登入時間 :
2022-05-28 19:29:12
a007. 判斷質數 | From: [49.158.83.43] | 發表日期 : 2018-11-09 21:52

#include
#include
using namespace std;
int prime(long long int a[5000]={0}){
int k=1;
a[0]=2;
for(int i=3;i<50000;i++){
int flag=0;
for(int j=2;j<=sqrt(i);j+=2){
if(i%j==0){
flag=1;
break;
}
}
if(flag==0){
a[k]=i;
k++;
}
}
return a[5000];
}
int main(){
long long int n,a[5000];
a[5000]=prime(a);
while(cin>>n){
int flag=0;
for(int i=2;i<5000;i++){
if(a[i]==0){
break;
}else if(n%a[i]==0){
flag=1;
break;
}else if(a[i]>=n){
flag=1;
break;
}
}
if(flag==0) cout<<"質數";
else cout<<"非質數";
cout<<"\n";
}
}


根據本人的私自臆測,陣列 a 應該是用來儲存小於 50000 的質數對吧?

可是小於 50000 的質數之個數是 5133 個,超過了陣列 a 的大小。

 
#15992: Re:有先建表,編譯也沒有錯,但為什麼跑不動?大師求解!⊙△⊙╯


timmy940410 (遊艇)

學校 : 臺北市私立延平高級中學
編號 : 69053
來源 : [122.116.197.27]
最後登入時間 :
2021-02-19 11:39:00
a007. 判斷質數 | From: [114.32.213.13] | 發表日期 : 2018-11-10 17:23

#include
#include
using namespace std;
int prime(long long int a[5000]={0}){
int k=1;
a[0]=2;
for(int i=3;i<50000;i++){
int flag=0;
for(int j=2;j<=sqrt(i);j+=2){
if(i%j==0){
flag=1;
break;
}
}
if(flag==0){
a[k]=i;
k++;
}
}
return a[5000];
}
int main(){
long long int n,a[5000];
a[5000]=prime(a);
while(cin>>n){
int flag=0;
for(int i=2;i<5000;i++){
if(a[i]==0){
break;
}else if(n%a[i]==0){
flag=1;
break;
}else if(a[i]>=n){
flag=1;
break;
}
}
if(flag==0) cout<<"質數";
else cout<<"非質數";
cout<<"\n";
}
}


根據本人的私自臆測,陣列 a 應該是用來儲存小於 50000 的質數對吧?

可是小於 50000 的質數之個數是 5133 個,超過了陣列 a 的大小。


我有改了一下陣列大小,可是還是跑不動耶

 
#15993: Re:有先建表,編譯也沒有錯,但為什麼跑不動?大師求解!⊙△⊙╯


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.137.149.175]
最後登入時間 :
2024-11-18 16:24:11
a007. 判斷質數 | From: [223.136.39.98] | 發表日期 : 2018-11-10 17:41

#include
#include
using namespace std;
int prime(long long int a[5000]={0}){
int k=1;
a[0]=2;
for(int i=3;i<50000;i++){
int flag=0;
for(int j=2;j<=sqrt(i);j+=2){
if(i%j==0){
flag=1;
break;
}
}
if(flag==0){
a[k]=i;
k++;
}
}
return a[5000];
}
int main(){
long long int n,a[5000];
a[5000]=prime(a);
while(cin>>n){
int flag=0;
for(int i=2;i<5000;i++){
if(a[i]==0){
break;
}else if(n%a[i]==0){
flag=1;
break;
}else if(a[i]>=n){
flag=1;
break;
}
}
if(flag==0) cout<<"質數";
else cout<<"非質數";
cout<<"\n";
}
}


根據本人的私自臆測,陣列 a 應該是用來儲存小於 50000 的質數對吧?

可是小於 50000 的質數之個數是 5133 個,超過了陣列 a 的大小。


我有改了一下陣列大小,可是還是跑不動耶

j+=2改成j++呢?
j+=2好像檢查不到所有可能的質因數吧?!

 

 
#15994: Re:有先建表,編譯也沒有錯,但為什麼跑不動?大師求解!⊙△⊙╯


timmy940410 (遊艇)

學校 : 臺北市私立延平高級中學
編號 : 69053
來源 : [122.116.197.27]
最後登入時間 :
2021-02-19 11:39:00
a007. 判斷質數 | From: [114.32.213.13] | 發表日期 : 2018-11-10 18:35

#include
#include
using namespace std;
int prime(long long int a[5000]={0}){
int k=1;
a[0]=2;
for(int i=3;i<50000;i++){
int flag=0;
for(int j=2;j<=sqrt(i);j+=2){
if(i%j==0){
flag=1;
break;
}
}
if(flag==0){
a[k]=i;
k++;
}
}
return a[5000];
}
int main(){
long long int n,a[5000];
a[5000]=prime(a);
while(cin>>n){
int flag=0;
for(int i=2;i<5000;i++){
if(a[i]==0){
break;
}else if(n%a[i]==0){
flag=1;
break;
}else if(a[i]>=n){
flag=1;
break;
}
}
if(flag==0) cout<<"質數";
else cout<<"非質數";
cout<<"\n";
}
}


根據本人的私自臆測,陣列 a 應該是用來儲存小於 50000 的質數對吧?

可是小於 50000 的質數之個數是 5133 個,超過了陣列 a 的大小。


我有改了一下陣列大小,可是還是跑不動耶

j+=2改成j++呢?
j+=2好像檢查不到所有可能的質因數吧?!

 

#include<iostream>

#include<math.h>

using namespace std;

int prime(long long int a[6000]={0}){

int k=1;

a[0]=2;

for(int i=3;i<50000;i++){

int flag=0;

for(int j=1;j<=sqrt(i);j++){

if(i%j==0&&j!=1){

flag=1;

break;

}

}

if(flag==0){

a[k]=i;

k++;

}

}

return a[6000];

}

int main(){

long long int n,a[6000];

a[6000]=prime(a);

while(cin>>n){

int flag=0;

for(int i=0;i<6000;i++){

if(a[i]==0){

break;

}else if(n==a[i]){

break;

}else if(n%a[i]==0){

flag=1;

break;

}else if(a[i]>n){

flag=1;

break;

}

}

if(flag!=0) cout<<"非質數";

else cout<<"質數";

cout<<"\n";

}

}

感謝大家,我找到超多地方修改,終於完成了,謝謝!

 
#15995: Re:有先建表,編譯也沒有錯,但為什麼跑不動?大師求解!⊙△⊙╯


timmy940410 (遊艇)

學校 : 臺北市私立延平高級中學
編號 : 69053
來源 : [122.116.197.27]
最後登入時間 :
2021-02-19 11:39:00
a007. 判斷質數 | From: [114.32.213.13] | 發表日期 : 2018-11-10 18:41

#include
#include
using namespace std;
int prime(long long int a[5000]={0}){
int k=1;
a[0]=2;
for(int i=3;i<50000;i++){
int flag=0;
for(int j=2;j<=sqrt(i);j+=2){
if(i%j==0){
flag=1;
break;
}
}
if(flag==0){
a[k]=i;
k++;
}
}
return a[5000];
}
int main(){
long long int n,a[5000];
a[5000]=prime(a);
while(cin>>n){
int flag=0;
for(int i=2;i<5000;i++){
if(a[i]==0){
break;
}else if(n%a[i]==0){
flag=1;
break;
}else if(a[i]>=n){
flag=1;
break;
}
}
if(flag==0) cout<<"質數";
else cout<<"非質數";
cout<<"\n";
}
}


根據本人的私自臆測,陣列 a 應該是用來儲存小於 50000 的質數對吧?

可是小於 50000 的質數之個數是 5133 個,超過了陣列 a 的大小。


我有改了一下陣列大小,可是還是跑不動耶

j+=2改成j++呢?
j+=2好像檢查不到所有可能的質因數吧?!

 

#include

#include

using namespace std;

int prime(long long int a[6000]={0}){

int k=1;

a[0]=2;

for(int i=3;i<50000;i++){

int flag=0;

for(int j=1;j<=sqrt(i);j++){

if(i%j==0&&j!=1){

flag=1;

break;

}

}

if(flag==0){

a[k]=i;

k++;

}

}

return a[6000];

}

int main(){

long long int n,a[6000];

a[6000]=prime(a);

while(cin>>n){

int flag=0;

for(int i=0;i<6000;i++){

if(a[i]==0){

break;

}else if(n==a[i]){

break;

}else if(n%a[i]==0){

flag=1;

break;

}else if(a[i]>n){

flag=1;

break;

}

}

if(flag!=0) cout<<"非質數";

else cout<<"質數";

cout<<"\n";

}

}

感謝大家,我找到超多地方修改,終於完成了,謝謝!

等等,為何我傳出去是TLE??

 
#15996: Re:有先建表,編譯也沒有錯,但為什麼跑不動?大師求解!⊙△⊙╯


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.137.149.175]
最後登入時間 :
2024-11-18 16:24:11
a007. 判斷質數 | From: [223.136.39.98] | 發表日期 : 2018-11-10 18:52

#include
#include
using namespace std;
int prime(long long int a[5000]={0}){
int k=1;
a[0]=2;
for(int i=3;i<50000;i++){
int flag=0;
for(int j=2;j<=sqrt(i);j+=2){
if(i%j==0){
flag=1;
break;
}
}
if(flag==0){
a[k]=i;
k++;
}
}
return a[5000];
}
int main(){
long long int n,a[5000];
a[5000]=prime(a);
while(cin>>n){
int flag=0;
for(int i=2;i<5000;i++){
if(a[i]==0){
break;
}else if(n%a[i]==0){
flag=1;
break;
}else if(a[i]>=n){
flag=1;
break;
}
}
if(flag==0) cout<<"質數";
else cout<<"非質數";
cout<<"\n";
}
}


根據本人的私自臆測,陣列 a 應該是用來儲存小於 50000 的質數對吧?

可是小於 50000 的質數之個數是 5133 個,超過了陣列 a 的大小。


我有改了一下陣列大小,可是還是跑不動耶

j+=2改成j++呢?
j+=2好像檢查不到所有可能的質因數吧?!

 

#include

#include

using namespace std;

int prime(long long int a[6000]={0}){

int k=1;

a[0]=2;

for(int i=3;i<50000;i++){

int flag=0;

for(int j=1;j<=sqrt(i);j++){

if(i%j==0&&j!=1){

flag=1;

break;

}

}

if(flag==0){

a[k]=i;

k++;

}

}

return a[6000];

}

int main(){

long long int n,a[6000];

a[6000]=prime(a);

while(cin>>n){

int flag=0;

for(int i=0;i<6000;i++){

if(a[i]==0){

break;

}else if(n==a[i]){

break;

}else if(n%a[i]==0){

flag=1;

break;

}else if(a[i]>n){

flag=1;

break;

}

}

if(flag!=0) cout<<"非質數";

else cout<<"質數";

cout<<"\n";

}

}

感謝大家,我找到超多地方修改,終於完成了,謝謝!

等等,為何我傳出去是TLE??

long long int 換成int不知有沒有差?
然後再優化I/O?!
測試執行大約等於建表時間=4ms

應該沒問題吧

 

 
#15997: Re:有先建表,編譯也沒有錯,但為什麼跑不動?大師求解!⊙△⊙╯


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.137.149.175]
最後登入時間 :
2024-11-18 16:24:11
a007. 判斷質數 | From: [223.136.39.98] | 發表日期 : 2018-11-10 18:55

#include
#include
using namespace std;
int prime(long long int a[5000]={0}){
int k=1;
a[0]=2;
for(int i=3;i<50000;i++){
int flag=0;
for(int j=2;j<=sqrt(i);j+=2){
if(i%j==0){
flag=1;
break;
}
}
if(flag==0){
a[k]=i;
k++;
}
}
return a[5000];
}
int main(){
long long int n,a[5000];
a[5000]=prime(a);
while(cin>>n){
int flag=0;
for(int i=2;i<5000;i++){
if(a[i]==0){
break;
}else if(n%a[i]==0){
flag=1;
break;
}else if(a[i]>=n){
flag=1;
break;
}
}
if(flag==0) cout<<"質數";
else cout<<"非質數";
cout<<"\n";
}
}


根據本人的私自臆測,陣列 a 應該是用來儲存小於 50000 的質數對吧?

可是小於 50000 的質數之個數是 5133 個,超過了陣列 a 的大小。


我有改了一下陣列大小,可是還是跑不動耶

j+=2改成j++呢?
j+=2好像檢查不到所有可能的質因數吧?!

 

#include

#include

using namespace std;

int prime(long long int a[6000]={0}){

int k=1;

a[0]=2;

for(int i=3;i<50000;i++){

int flag=0;

for(int j=1;j<=sqrt(i);j++){

if(i%j==0&&j!=1){

flag=1;

break;

}

}

if(flag==0){

a[k]=i;

k++;

}

}

return a[6000];

}

int main(){

long long int n,a[6000];

a[6000]=prime(a);

while(cin>>n){

int flag=0;

for(int i=0;i<6000;i++){

if(a[i]==0){

break;

}else if(n==a[i]){

break;

}else if(n%a[i]==0){

flag=1;

break;

}else if(a[i]>n){

flag=1;

break;

}

}

if(flag!=0) cout<<"非質數";

else cout<<"質數";

cout<<"\n";

}

}

感謝大家,我找到超多地方修改,終於完成了,謝謝!

等等,為何我傳出去是TLE??

long long int 換成int不知有沒有差?
然後再優化I/O?!
測試執行大約等於建表時間=4ms

應該沒問題吧

 

改int就AC了


 
#15998: Re:有先建表,編譯也沒有錯,但為什麼跑不動?大師求解!⊙△⊙╯


314159265358979323846264338327 ... (少年π)

學校 : 臺北市私立延平高級中學
編號 : 69058
來源 : [223.137.149.175]
最後登入時間 :
2024-11-18 16:24:11
a007. 判斷質數 | From: [223.136.39.98] | 發表日期 : 2018-11-10 19:05

#include
#include
using namespace std;
int prime(long long int a[5000]={0}){
int k=1;
a[0]=2;
for(int i=3;i<50000;i++){
int flag=0;
for(int j=2;j<=sqrt(i);j+=2){
if(i%j==0){
flag=1;
break;
}
}
if(flag==0){
a[k]=i;
k++;
}
}
return a[5000];
}
int main(){
long long int n,a[5000];
a[5000]=prime(a);
while(cin>>n){
int flag=0;
for(int i=2;i<5000;i++){
if(a[i]==0){
break;
}else if(n%a[i]==0){
flag=1;
break;
}else if(a[i]>=n){
flag=1;
break;
}
}
if(flag==0) cout<<"質數";
else cout<<"非質數";
cout<<"\n";
}
}


根據本人的私自臆測,陣列 a 應該是用來儲存小於 50000 的質數對吧?

可是小於 50000 的質數之個數是 5133 個,超過了陣列 a 的大小。


我有改了一下陣列大小,可是還是跑不動耶

j+=2改成j++呢?
j+=2好像檢查不到所有可能的質因數吧?!

 

#include

#include

using namespace std;

int prime(long long int a[6000]={0}){

int k=1;

a[0]=2;

for(int i=3;i<50000;i++){

int flag=0;

for(int j=1;j<=sqrt(i);j++){

if(i%j==0&&j!=1){

flag=1;

break;

}

}

if(flag==0){

a[k]=i;

k++;

}

}

return a[6000];

}

int main(){

long long int n,a[6000];

a[6000]=prime(a);

while(cin>>n){

int flag=0;

for(int i=0;i<6000;i++){

if(a[i]==0){

break;

}else if(n==a[i]){

break;

}else if(n%a[i]==0){

flag=1;

break;

}else if(a[i]>n){

flag=1;

break;

}

}

if(flag!=0) cout<<"非質數";

else cout<<"質數";

cout<<"\n";

}

}

感謝大家,我找到超多地方修改,終於完成了,謝謝!

等等,為何我傳出去是TLE??

long long int 換成int不知有沒有差?
然後再優化I/O?!
測試執行大約等於建表時間=4ms

應該沒問題吧

 

改int就AC了


剛剛查了一下
long long int比int慢1倍左右
能用int就用int

 
#16022: Re:有先建表,編譯也沒有錯,但為什麼跑不動?大師求解!⊙△⊙╯


timmy940410 (遊艇)

學校 : 臺北市私立延平高級中學
編號 : 69053
來源 : [122.116.197.27]
最後登入時間 :
2021-02-19 11:39:00
a007. 判斷質數 | From: [114.32.213.13] | 發表日期 : 2018-11-11 19:47

#include
#include
using namespace std;
int prime(long long int a[5000]={0}){
int k=1;
a[0]=2;
for(int i=3;i<50000;i++){
int flag=0;
for(int j=2;j<=sqrt(i);j+=2){
if(i%j==0){
flag=1;
break;
}
}
if(flag==0){
a[k]=i;
k++;
}
}
return a[5000];
}
int main(){
long long int n,a[5000];
a[5000]=prime(a);
while(cin>>n){
int flag=0;
for(int i=2;i<5000;i++){
if(a[i]==0){
break;
}else if(n%a[i]==0){
flag=1;
break;
}else if(a[i]>=n){
flag=1;
break;
}
}
if(flag==0) cout<<"質數";
else cout<<"非質數";
cout<<"\n";
}
}


根據本人的私自臆測,陣列 a 應該是用來儲存小於 50000 的質數對吧?

可是小於 50000 的質數之個數是 5133 個,超過了陣列 a 的大小。


我有改了一下陣列大小,可是還是跑不動耶

j+=2改成j++呢?
j+=2好像檢查不到所有可能的質因數吧?!

 

#include

#include

using namespace std;

int prime(long long int a[6000]={0}){

int k=1;

a[0]=2;

for(int i=3;i<50000;i++){

int flag=0;

for(int j=1;j<=sqrt(i);j++){

if(i%j==0&&j!=1){

flag=1;

break;

}

}

if(flag==0){

a[k]=i;

k++;

}

}

return a[6000];

}

int main(){

long long int n,a[6000];

a[6000]=prime(a);

while(cin>>n){

int flag=0;

for(int i=0;i<6000;i++){

if(a[i]==0){

break;

}else if(n==a[i]){

break;

}else if(n%a[i]==0){

flag=1;

break;

}else if(a[i]>n){

flag=1;

break;

}

}

if(flag!=0) cout<<"非質數";

else cout<<"質數";

cout<<"\n";

}

}

感謝大家,我找到超多地方修改,終於完成了,謝謝!

等等,為何我傳出去是TLE??

long long int 換成int不知有沒有差?
然後再優化I/O?!
測試執行大約等於建表時間=4ms

應該沒問題吧

 

改int就AC了


剛剛查了一下
long long int比int慢1倍左右
能用int就用int

 

#include<iostream>

#include<math.h>

using namespace std;

int prime(int a[6000]={0}){

int k=1;

a[0]=2;

for(int i=3;i<50000;i++){

int flag=0;

for(int j=1;j<=sqrt(i);j++){

if(i%j==0&&j!=1){

flag=1;

break;

}

}

if(flag==0){

a[k]=i;

k++;

}

}

return a[6000];

}

int main(){

int n,a[6000];

a[6000]=prime(a);

while(cin>>n){

int flag=0;

for(int i=0;i<6000;i++){

if(a[i]==0||n==a[i]){

break;

}else if(n%a[i]==0||a[i]>n){

flag=1;

break;

}

}

if(flag==0) cout<<"質數";

else cout<<"非質數";

cout<<"\n";

}

}
謝謝各位的幫助,本人今天終於AC了⊙▽⊙,謝謝!

 
ZeroJudge Forum