#10612: 建表仍超時?


erik_kuo (小浴巾)

學校 : 基隆市私立二信高級中學
編號 : 50767
來源 : [61.220.150.250]
最後登入時間 :
2017-06-09 12:40:36
a007. 判斷質數 | From: [220.136.21.87] | 發表日期 : 2016-01-06 22:19

#include <iostream>
#include <cstring>
#include <vector>
#include <cmath>
#define maxn 46340
using namespace std;
bool c[maxn+10];
vector <int>p;
void sieve()
{
int i,j;
memset(c,0,sizeof(c));
c[0]=c[1]=1;
for(i=2;i<=maxn;i++)
{
if(c[i]==1) continue;
p.push_back(i);
for(j=i+i;j<=maxn;j+=i)
{
c[j]=1;
}
}
return;
}
bool isp(int n)
{
if(n<=maxn) return(!c[n]);
else
{
int q=(int)sqrt(n);
int k;
for(k=0;k<=p.size()&&p[k]<=q;k++)
{
cout <<n%p[k]<<endl;
if(n%p[k]==0) return false;
else continue;
return true;
}
}
}
int main()
{
sieve();
int n;
while(cin >> n)
{
if(isp(n)) cout <<"質數"<<endl;
else cout <<"非質數"<<endl;
}
return 0;
}

 
#10613: Re:建表仍超時?


erik_kuo (小浴巾)

學校 : 基隆市私立二信高級中學
編號 : 50767
來源 : [61.220.150.250]
最後登入時間 :
2017-06-09 12:40:36
a007. 判斷質數 | From: [220.136.21.87] | 發表日期 : 2016-01-06 22:44

#include
#include
#include
#include
#define maxn 46340
using namespace std;
bool c[maxn+10];
vector p;
void sieve()
{
int i,j;
memset(c,0,sizeof(c));
c[0]=c[1]=1;
for(i=2;i<=maxn;i++)
{
if(c[i]==1) continue;
p.push_back(i);
for(j=i+i;j<=maxn;j+=i)
{
c[j]=1;
}
}
return;
}
bool isp(int n)
{
if(n<=maxn) return(!c[n]);
else
{
int q=(int)sqrt(n);
int k;
for(k=0;k<=p.size()&&p[k]<=q;k++)
{
cout <<n%p[k]<<endl;
if(n%p[k]==0) return false;
else continue;
return true;
}
}
}
int main()
{
sieve();
int n;
while(cin >> n)
{
if(isp(n)) cout <<"質數"<<endl;
else cout <<"非質數"<<endl;
}
return 0;
}

改成這樣變RE


#include  <iostream>

#include  <cstring>

#include  <vector>

#include  <cmath>

#define  maxn 46340

using namespace std;

bool c[maxn+10];

vector <int>p;

void sieve()

{

int i,j;

memset(c,0,sizeof(c));

c[0]=c[1]=1;

for(i=2;i<=maxn;i++)

{

if(c[i]==1) continue;

p.push_back(i);

for(j=i+i;j<=maxn;j+=i)

{

c[j]=1;

}

return;

}

bool isp(int n)

{

if(n<=maxn) return(!c[n]);

else 

{

int q=(int)sqrt(n);

int k;

for(k=0;k<=p.size()&&p[k]<=q;k++)

{

if(n%p[k]==0) return false;

else continue;

}

return true;

}

}

int main()

{

    sieve();

    int n;

    while(cin >> n)

    {

if(isp(n)) cout <<"質數"<<endl;

else cout <<"非質數"<<endl; 

    }

    return 0;

}

第 1 測資點(100%): RE (SIGFPE) 
執行時期錯誤 

溢位或者除以0的錯誤!! 
Floating point exception

請問是為何?

 
#10614: Re:建表仍超時?


anandrewboy70900 (ShowTsai)

學校 : 國立中央大學
編號 : 27736
來源 : [203.204.218.144]
最後登入時間 :
2024-10-11 16:21:37
a007. 判斷質數 | From: [140.115.207.145] | 發表日期 : 2016-01-07 01:28

 

#include <iostream>
#include <cstring>
#include <vector>
#include <cmath>
#define maxn 46340
using namespace std;
bool c[maxn+10];
vector <int>p;
void sieve()
{
int i,j;
memset(c,0,sizeof(c));
c[0]=c[1]=1;
for(i=2;i<=maxn;i++)
{
if(c[i]==1) continue;
p.push_back(i);
for(j=i+i;j<=maxn;j+=i)
{
c[j]=1;

}
return;
}
bool isp(int n)
{
if(n<=maxn) return(!c[n]);
else 
{
int q=(int)sqrt(n);
int k;
for(k=0;k<p.size()&&p[k]<=q;k++)
{
cout <<n%p[k]<<endl;
if(n%p[k]==0) return false;
else continue;
return true;
}
}
}
int main()
{
sieve();
int n;
while(cin >> n)
{
if(isp(n)) cout <<"質數"<<endl;
else cout <<"非質數"<<endl; 
}
return 0;
}


 
#10615: Re:建表仍超時?


anandrewboy70900 (ShowTsai)

學校 : 國立中央大學
編號 : 27736
來源 : [203.204.218.144]
最後登入時間 :
2024-10-11 16:21:37
a007. 判斷質數 | From: [140.115.207.145] | 發表日期 : 2016-01-07 01:33

 

貼錯了@@

應該是這個

注意vector的index是0~size()-1

#include  <iostream>

#include  <cstring>

#include  <vector>

#include  <cmath>

#define  maxn 46340

using namespace std;

bool c[maxn+10];

vector <int>p;

void sieve()

{

int i,j;

memset(c,0,sizeof(c));

c[0]=c[1]=1;

for(i=2;i<=maxn;i++)

{

if(c[i]==1) continue;

p.push_back(i);

for(j=i+i;j<=maxn;j+=i)

{

c[j]=1;

}

return;

}

bool isp(int n)

{

if(n<=maxn) return(!c[n]);

else 

{

int q=(int)sqrt(n);

int k;

for(k=0;k<p.size()&&p[k]<=q;k++)

{

if(n%p[k]==0) return false;

else continue;

}

return true;

}

}

int main()

{

    sieve();

    int n;

    while(cin >> n)

    {

if(isp(n)) cout <<"質數"<<endl;

else cout <<"非質數"<<endl; 

    }

    return 0;

}




 
#10619: Re:建表仍超時?


erik_kuo (小浴巾)

學校 : 基隆市私立二信高級中學
編號 : 50767
來源 : [61.220.150.250]
最後登入時間 :
2017-06-09 12:40:36
a007. 判斷質數 | From: [36.224.109.127] | 發表日期 : 2016-01-07 21:41

 

貼錯了@@

應該是這個

注意vector的index是0~size()-1

#include  

#include  

#include  

#include  

#define  maxn 46340

using namespace std;

bool c[maxn+10];

vector p;

void sieve()

{

int i,j;

memset(c,0,sizeof(c));

c[0]=c[1]=1;

for(i=2;i<=maxn;i++)

{

if(c[i]==1) continue;

p.push_back(i);

for(j=i+i;j<=maxn;j+=i)

{

c[j]=1;

}

return;

}

bool isp(int n)

{

if(n<=maxn) return(!c[n]);

else 

{

int q=(int)sqrt(n);

int k;

for(k=0;k<p.size()&&p[k]<=q;k++)

{

if(n%p[k]==0) return false;

else continue;

}

return true;

}

}

int main()

{

    sieve();

    int n;

    while(cin >> n)

    {

if(isp(n)) cout <<"質數"<<endl;

else cout <<"非質數"<<endl; 

    }

    return 0;

}




謝謝你的幫忙~

 
ZeroJudge Forum