def mert_function(target_num, factor_list_option ): global g_call_cnt # we need to set this, because it is global variable, maybe other function may change it. g_call_cnt = 0 assert(target_num > 1) # Get product factors using count_number_prime_product_recursive(...) begin_list = [1] factors_his = [0]* MAX_NUM_FACTORS print 'target_num %d'%(target_num) primes_list, liouvi_power_prime_dict = get_factor_list(target_num, factor_list_option) print 'num of primes_list %d'%(len(primes_list)) factors_his, factors_his_cur_n_down = count_number_prime_product_recursive(begin_list, primes_list, target_num, factors_his, factor_list_option, liouvi_power_prime_dict) print target_num, factors_his, factors_his_cur_n_down odd_prime_factors_cnt_comm, even_prime_factors_cnt_comm = get_even_odd_cnt_from_factors(factors_his) print 'target_num %d, odd_cnt %d, even_cnt %d, 1 is not included'%(target_num, odd_prime_factors_cnt_comm, even_prime_factors_cnt_comm) # mobi(n) even factor is 1, odd factor is -1 # we need to add 1 because mobi(1) = 1 which is not included in our factor list parity = even_prime_factors_cnt_comm - odd_prime_factors_cnt_comm + 1 return parity, factors_his, odd_prime_factors_cnt_comm, even_prime_factors_cnt_comm
def mert_function_access_a_node(target_num, begin_list, factor_option = g_TRUE_PRIME): global g_call_cnt # we need to set this, because it is global variable, maybe other function may change it. g_call_cnt = 0 assert(target_num > 1) # generate primes_list up to target_num, primes_list, liouvi_power_prime_dict = get_factor_list(target_num, factor_option) print 'num of primes_list %d'%(len(primes_list)) check = is_valid_list(target_num, primes_list, begin_list) if(check == False): print 'Not valid list: ', begin_list return None, [] # Get product factors using count_number_prime_product_recursive(...) factors_his = [0]* MAX_NUM_FACTORS print 'target_num %d'%(target_num) factors_his, factors_his_cur_n_down = count_number_prime_product_recursive(begin_list, primes_list, target_num, factors_his, factor_option, liouvi_power_prime_dict) print target_num, factors_his, factors_his_cur_n_down odd_prime_factors_cnt_comm, even_prime_factors_cnt_comm = get_even_odd_cnt_from_factors(factors_his) print 'target_num %d, odd_cnt %d, even_cnt %d, 1 is not included'%(target_num, odd_prime_factors_cnt_comm, even_prime_factors_cnt_comm) # mobi(n) even factor is 1, odd factor is -1 parity = even_prime_factors_cnt_comm - odd_prime_factors_cnt_comm return parity, factors_his
return parity, factors_his # =============================================================================================== if __name__=='__main__': target_num, factor_list_option, log_save_option = mert_parse_arguments() mert_settings.g_log_save_option = log_save_option # debug trace option from mert_constants import g_ON_SCREEN_FULL_DEBUG_TRACE mert_settings.g_debug_print_option = g_ON_SCREEN_FULL_DEBUG_TRACE from mert_constants import g_LOG_YES # generate primes_list up to target_num, primes_list, liouvi_power_prime_dict = get_factor_list(target_num, factor_list_option ) print 'num of primes_list %d'%(len(primes_list)) # Get product factors using count_number_prime_product_recursive(...) begin_list = [1] factors_his = [0]* MAX_NUM_FACTORS print 'target_num %d'%(target_num) g_call_cnt = 0 factors_his, factors_his_cur_n_down = count_number_prime_product_recursive(begin_list, primes_list, target_num, factors_his, factor_list_option, liouvi_power_prime_dict) print target_num, factors_his, factors_his_cur_n_down odd_prime_factors_cnt_comm, even_prime_factors_cnt_comm = get_even_odd_cnt_from_factors(factors_his) print 'target_num %d, odd_cnt %d, even_cnt %d, 1 is not included'%(target_num, odd_prime_factors_cnt_comm, even_prime_factors_cnt_comm) if(factor_list_option == g_LIOUVI_FACTOR):