作者youngkai (年輕人)
看板CGI-Game
標題Re: [IKA] 軍事分析器 (Firefox/火狐限定) (更新:ꔠ…
時間Wed Jul 2 00:32:05 2008
想到一個解法
你另外寫一隻程式,function跟原來一樣
只是多一行,在最後一個for加一個 if (answer[0] !=0 && answer[1] !=0 &&...自己填)
這代表這個input有解,就return 1; else return 0;
在主程式裡加一個for
int has_answer[6000];
(for int i = 80; i < 6000; i++ ){
has_answer[i] = your_function(i);
}
(for int i = 80; i < 6000; i++ ){
if (has_answer[i] == 1)
cout << i << " has solution\n"; // 或者輸出到一個文字檔
}
接下來是改js
把上述80~6000有解的數字,放入int陣列,例如
int sol[];
sol[0] = 80;
sol[1] = 158;
sol[2] = 160;
.....
主程式改成
for(int i = 0; i < (sol的最大index); i++) {
if ( (input % sol[i]) == 0) //相除餘數為零
your_function(input / sol[i], sol[i]);
}
這樣一來,只要算sol[i]的解,結果都乘以input / sol[i]
就不用重複計算已經知道有解的整數倍的結果了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.168.217.123
1F:推 cowbaying:我寫的不好嗎? 哭哭 07/02 00:37
※ 編輯: youngkai 來自: 218.168.217.123 (07/02 00:39)
2F:推 shyangs:一樓有發佈源碼嗎= =a 07/02 00:41
3F:推 neutrino:1. open source的好用 2. 網頁的方便 07/02 00:42
4F:→ neutrino:我也在想一些修改 改好了在丟上來 07/02 00:42
5F:→ youngkai:我想到resursive的解法了,大致上原理差不多 07/02 00:43
6F:→ youngkai:如果80有解,80的倍數必定有解,所以先mod有解的i 07/02 00:44
7F:→ youngkai:如果是i的倍數,就不用跑那十幾個for-loop了 07/02 00:44
8F:→ neutrino:不過這本來就是個np-hard問題 不用奢望他能跑太大的input 07/02 00:45
9F:→ neutrino:怎樣設置一些(給使用者選擇)的限定條件讓他更實用才是重 07/02 00:46
10F:→ neutrino:點 07/02 00:46
11F:推 cowbaying:我沒發原碼...我用的只是簡單的迴圈而已 07/02 00:47
12F:→ cowbaying:等改進後再來發好了 目前在新增功能 07/02 00:48
13F:→ youngkai:因為是np-hard,所以用空間換時間是最好的解法 07/02 00:53
14F:推 neutrino:基本上 1082以後所有偶數都有解........這樣幫助有限 07/02 13:01
15F:推 shyangs:更新,用一些代碼取代最後一個兵種的for-loop計算。 07/02 13:28