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 6849 Точки

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

0
manito_17711 avatar manito_17711 43 Точки

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

0
RoYaL avatar RoYaL Trainer 6849 Точки

Добре, пуснах го на 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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.