C++ функция странно тормозит все программу
Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті
Ести функция которая комбинирует числа из переданного массива цифр. Например для массива [1,2,3] она составляет комбинации , 1,2,3,12,23,123 и передает их дальше для проверки является ли составленное число простым или нет. Если переданное число оказалось простым то в функцию возвращается 1 и мы увеличиваем счетчик простых чисел на 1. В конце возвращаем количество найденных простных чисел.
Наблюдается такая фигня — если я возвращаю в конце переменную primes_to_show, то обсчет 1000 массивов занимает 48 секунд, если я возвращаю просто число 5 или 10 или переменную primes_to_show_ret которая только что была инициализированна и ей присвоенно 10 то обсчет 1000 массивов занимает всего 5 секунд !!!!! Почему наблюдается такая большая разница ? И еще одна фигня, переменная к — это индекс цифры которая будет выбранна из массива, если я инициализирую ее как short (а не как int) то 5 секунд превращаются в 27 секунд, тоесть замедляестя все в 5 раз.
int get_all_simple(int *list_to_work,int dont_check_1_digit, int len_of_list){ //# list_to_work=[1,2,3,4] //# print("list to work ",list_to_work) int primes_to_show = 0; int test_succ = 0; for(int i= 0; i<len_of_list; i++){ for (int j=1;j<len_of_list-i+1-dont_check_1_digit;j++){ int number_for_test=0; int k; /////////////////////must be int for speed!!!!! for (k=i;k<len_of_list-j+1;k++){ number_for_test = number_for_test*10 + list_to_work[k]; } if (number_for_test%2){ test_succ=prepare_and_check_simple(number_for_test,list_to_work[k]); primes_to_show = primes_to_show + test_succ;}; } } //int primes_to_show_ret = 54; //return (primes_to_show_ret); //return (20); return (primes_to_show); //////////////////zasada tut }
20 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів