вы забыли на си сделать многопоточное вычисление вот он и проиграл джаве,
по поводу библиотек, их и на си много,
а ещё разные языки по разному работают с массивами, си например болт забивает на проверку границ массива оставляя это на совести программиста, ещё очень много зависит от того как массивы расположены в памяти , выравнивания, я уже не говорю про некоторые читы типа разворачивания цикла, вот у вас длинна цикла известна заранее, компилятору развернуть такой цикл как нефиг делать - меньше условных переходов быстрее код