作者tw00088437 (喵貓 loves fish)
看板C_and_CPP
標題[ACM ] 10394 twin primes (CE)
時間Thu Nov 19 18:29:32 2009
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
題號:
http://zerojudge.tw/ShowProblem?problemid=d362
遇到的問題:
在dev c++上可以跑 但是上傳之後Compilation Error
編譯錯誤, 請檢查語法是否符合系統所支援的編譯器的要求。
錯誤訊息:
/usr/bin/ld: final link failed: Memory exhausted
collect2: ld returned 1 exit status
有問題的code: (請善用置底文的標色功能)
#include<iostream>
using namespace std;
#define max 20000001
#define up 2000001
int prime[max]={2,2,1,1,0};
int store[up+1]={0,2,3};
int ans[100001]={0};
int main()
{
int c=3;
for(int x=4;x<max;x+=2)
prime[x]=2;
for(int x=9;x<max;x+=3)
prime[x]=2;
for(int x=5,d=0;x<max;x+=( ((d&1)<<1)+2),d++)
{
if(!(prime[x]))
{
prime[x]=1;
store[c]=x;
c++;
if(c==up)
break;
for(int y=5*x;y<max;y+=x)
prime[y]=2;
}
}
int f=1;
for(int z=1;z<(up-1);z++)
{
if((store[z+1]-store[z])==2)
{
ans[f]=store[z];
f++;
if(f==100001)
break;
}
}
int n;
while(cin>>n)
cout<<"("<<ans[n]<<", "<<ans[n]+2<<")"<<endl;
}
補充說明:
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.101.7
推 VictorTom:錯誤訊息不是告訴你記憶體用超過了嗎?? 看起來就是靜態 11/19 18:33
→ VictorTom:陣列開太大了?_? 11/19 18:33
→ tw00088437:可是題目要求不是得開到那麼大嗎@"@.. 11/19 18:34
推 Fenikso:我傳了沒問題啊 11/19 18:36
→ MOONRAKER:題目又沒有叫你用什麼資料形態開那麼大 XD 11/19 18:36
→ Fenikso:uva judge, AC 2.376sec 11/19 18:36
→ MOONRAKER:本人也寫過這題,可以給你一個關鍵字:bitset 11/19 18:37
→ tw00088437:奇怪 我傳UVA也過了 這是怎麼回事= = 11/19 18:46
推 VictorTom:話說, 這個感覺不需要開int這麼大array啊XD 11/19 18:48
推 Fenikso:但是問題又不在演算法XD 11/19 18:50
→ VictorTom:算了, 從沒寫過ACM題目, 還是不要亂猜....Orz 11/19 18:50
推 chchwy:用bool用量就剩1/4 用bitset就剩1/32 別老是int 11/20 00:24