#20803: 被TLE求不建表加速法


XxCrocodilexX (私は短吻鱷)

學校 : 臺北市立大安高級工業職業學校
編號 : 115326
來源 : [1.171.114.252]
最後登入時間 :
2022-04-19 21:30:30
a007. 判斷質數 | From: [114.44.110.115] | 發表日期 : 2020-03-08 15:56

以下是我的code

 

//a007 判斷質數

#include<iostream>

using namespace std;

int main()
{
int a;
bool b=true;

while(cin>>a)
{
if(a%2==0)
b=false;
else
{
for(int i=3;i<a;i+=2)
{
if(a%i==0)
b=false;
}
}

if(b)
printf("質數\n");
else
printf("非質數\n");

b=true;
}

return 0;
}

 

求大大如何讓他不被TLE

 
#20804: Re:被TLE求不建表加速法


XxCrocodilexX (私は短吻鱷)

學校 : 臺北市立大安高級工業職業學校
編號 : 115326
來源 : [1.171.114.252]
最後登入時間 :
2022-04-19 21:30:30
a007. 判斷質數 | From: [114.44.110.115] | 發表日期 : 2020-03-08 16:12

以下是我的code

 

//a007 判斷質數

#include

using namespace std;

int main()
{
int a;
bool b=true;

while(cin>>a)
{
if(a%2==0)
b=false;
else
{
for(int i=3;i<a;i+=2)
{
if(a%i==0)
b=false;
}
}

if(b)
printf("質數\n");
else
printf("非質數\n");

b=true;
}

return 0;
}

 

求大大如何讓他不被TLE


e484 明明只是把輸出改成yes no而已

我e484卻過了(我後來有在一開始的偶數判斷前面多加一個如果為2的話b=true)

 

AC (2ms, 344KB)
 
#20806: Re:被TLE求不建表加速法


IanWang20061204 (詭譎)

學校 : 臺北市立建國高級中學
編號 : 95399
來源 : [140.113.215.249]
最後登入時間 :
2024-11-20 16:56:13
a007. 判斷質數 | From: [61.228.217.249] | 發表日期 : 2020-03-08 18:14

以下是我的code

 

//a007 判斷質數

#include

using namespace std;

int main()
{
int a;
bool b=true;

while(cin>>a)
{
if(a%2==0)
b=false;
else
{
for(int i=3;i<a;i+=2)
{
if(a%i==0)
b=false;
}
}

if(b)
printf("質數\n");
else
printf("非質數\n");

b=true;
}

return 0;
}

 

求大大如何讓他不被TLE


e484 明明只是把輸出改成yes no而已

我e484卻過了(我後來有在一開始的偶數判斷前面多加一個如果為2的話b=true)

 

AC (2ms, 344KB)


這題不是只要硬做就可以解決的

可以拿建質數表或是其他方式來解(討論區都有,自己爬文吧)

 

你能過e484的原因是因為e484只有1行,範圍又小,很容易過

但a007有200000比測資,用你的方法可能一個2147483647就耗掉一半的時間了

 

本題建議不要用iostream,因為iostream跑太慢了(取消連棟也沒比cstdio快多少),但也沒有必要搞優化,cstdio就可以過了

 
#20807: Re:被TLE求不建表加速法


IanWang20061204 (詭譎)

學校 : 臺北市立建國高級中學
編號 : 95399
來源 : [140.113.215.249]
最後登入時間 :
2024-11-20 16:56:13
a007. 判斷質數 | From: [61.228.217.249] | 發表日期 : 2020-03-08 18:16

以下是我的code

 

//a007 判斷質數

#include

using namespace std;

int main()
{
int a;
bool b=true;

while(cin>>a)
{
if(a%2==0)
b=false;
else
{
for(int i=3;i<a;i+=2)
{
if(a%i==0)
b=false;
}
}

if(b)
printf("質數\n");
else
printf("非質數\n");

b=true;
}

return 0;
}

 

求大大如何讓他不被TLE


e484 明明只是把輸出改成yes no而已

我e484卻過了(我後來有在一開始的偶數判斷前面多加一個如果為2的話b=true)

 

AC (2ms, 344KB)


這題不是只要硬做就可以解決的

可以拿建質數表或是其他方式來解(討論區都有,自己爬文吧)

 

你能過e484的原因是因為e484只有1行,範圍又小,很容易過

但a007有200000比測資,用你的方法可能一個2147483647就耗掉一半的時間了

 

本題建議不要用iostream,因為iostream跑太慢了(取消連棟也沒比cstdio快多少),但也沒有必要搞優化,cstdio就可以過了



對不起沒看到你說不要建表,我建議你可以看這篇 https://zerojudge.tw/ShowThread?postid=20495&reply=0,有很多種不建表的

 
ZeroJudge Forum