Професионална програма
Loading...
manito_17711 avatar manito_17711 43 Точки

[C++ Compilers] Code::Blocks VS Visual Studio 2015

Здравейте,

 

Кода тук представлява решение на тази задача -> https://projecteuler.net/problem=47

 

Ако се компилира в Code::Blocks, решението отнема 2,8 секунди. Ако се използва VS2015 - 2,8 минути! Знам, че има разлики в компилаторите, но предполагам че аз нещо бъркам - оптимизация или липса на такава...

 

Някой да има идея защо се получава така?

 

Поздрави,

Ники

Тагове:
0
C++ Programming 08/07/2016 15:11:33
RoYaL avatar RoYaL Trainer 6847 Точки

А какви са комлилаторите, които ползваш все пак? За VS мога да предположа. За CodeBlocks?

0
manito_17711 avatar manito_17711 43 Точки

Дефолтния.. мисля че е MinGW.

0
RoYaL avatar RoYaL Trainer 6847 Точки

Добре, пуснах го на gcc/mingw в CLion и върви за 2 сек общо взето. Под VS наистина се бави. Това, което си мисля е, че идва от имплементацията на set. Виждам, че на двете по различен начин е имплементирано (въпреки, че и в двата случая явно е черно-червено дърво).

Този ред не е ли излишен иначе?

factors.insert(2);


В крайна сметка това е set. Тази двойка няма да влезе втори път. Само бавиш програмата така да търси дали я няма.

0
manito_17711 avatar manito_17711 43 Точки

Ами не.. метода пресмята броя на простите множители на дадено съставно число. То е същото и със следващия цикъл... а използвам точно set, за да няма повторения, защото ми трябва count-a на множителите. Пък и set::insert e с O(logn).. по време на insert-a, капацитета на сет-а не минава 8 - практически може да се каже O(1)...  не мисля, че се бави от това.

0
08/07/2016 16:02:10