[ACM ] 題號136 找第一千五百個不含任何2,3 …

看板C_and_CPP作者 (喵貓 loves fish)時間14年前 (2009/11/04 22:14), 編輯推噓4(4010)
留言14則, 7人參與, 最新討論串1/2 (看更多)
題號: 136 http://tinyurl.com/yhnvpqp 遇到的問題: 雖然是算出來答案傳上去了,但是跑法很慢感覺沒效率(大概要跑幾萬ms) 不知道要怎麼改進(答案大約八億多) ps: 請問d>>=1跑的會比d/=2快嗎? 有問題的code: (請善用置底文的標色功能) #include<iostream> using namespace std; long long a,d; int main() { int num=1; for(a=2;a>=1;a++) { d=a; if(d%7==0||d%11==0||d%13==0||d%17==0||d%23==0||d%29==0) continue; while(d%2==0) d>>=1; while(d%3==0) d/=3; while(d%5==0) d/=5; if(d==1) num++; //found an ugly number! if(num==1500) break; } cout<<a; system("pause"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.104.73 ※ 編輯: tw00088437 來自: 61.228.104.73 (11/04 22:15)

11/04 22:22, , 1F
printf("The 1500'th ugly number is 859963....
11/04 22:22, 1F

11/04 22:22, , 2F
我是跑出來並且AC了啊=.=只是這樣感覺很沒意義
11/04 22:22, 2F

11/04 22:30, , 3F
這題網路上的解答應該蠻多的
11/04 22:30, 3F

11/04 22:32, , 4F
你可以反過來想,我只需要那些因數所組成的數
11/04 22:32, 4F

11/04 23:00, , 5F
有一作法是用2,3,5組合出約兩千組數字再排序
11/04 23:00, 5F

11/04 23:01, , 6F
不過不知道為何我怎麼做都錯orz
11/04 23:01, 6F

11/05 23:22, , 7F
至少可以一次跳二.....五的倍數也有規則....
11/05 23:22, 7F

11/05 23:24, , 8F
用樓上的方法應該就可以很快了.....我是這個方式AC的....
11/05 23:24, 8F

11/05 23:45, , 9F
@@?
11/05 23:45, 9F

11/05 23:45, , 10F
一次跳二?
11/05 23:45, 10F

11/06 11:39, , 11F
11/06 11:39, 11F

11/07 01:14, , 13F
↑我也分享我的做法
11/07 01:14, 13F

11/07 17:19, , 14F
謝謝: )
11/07 17:19, 14F
文章代碼(AID): #1AyOmkgF (C_and_CPP)
文章代碼(AID): #1AyOmkgF (C_and_CPP)