Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1 ... 308, 309, 310, 311, 312
 Re: Пентадекатлон мечты
Dmitriy40

wrest в сообщении #1723055 писал(а):
Но только у меня для паттерна [2299, 3887, 32, 8381, 243, 775]получились
n0=1081619296944347678
m=4423167467262704160

А у вас для паттерна [22990, 11661, 32, 8381, 486, 775] получились
n0=437267946345566270
m=451343619108439200


Теперь смотрим на частоты (паттерн 1 мой, паттерн 2 ваш):
Код:
========================================
ПАТТЕРН #1 | n0=1081619296944347678 | m=4423167467262704160 | logM=42.93
tau_R = [8, 8, 8, 8, 8, 8]
Проверено: 10001 | Полных: 5 | Плотность: 5.000 e-4
Частоты по позициям (τ=T):
  pos 0 (τ_R=8):  31.1%
  pos 1 (τ_R=8):  29.9%
  pos 2 (τ_R=8):  14.4% 
  pos 3 (τ_R=8):  28.6%
  pos 4 (τ_R=8):  24.0%
  pos 5 (τ_R=8):  29.4%
Расчёт ожидаемой вероятности полной цепочки:
  Ожидаемая (prod pos): 2.7140 e-4
  Эмпирическая (full/trials): 4.9995 e-4
  Коэффициент корреляции CRT: 1.84
========================================
ПАТТЕРН #2 | n0=437267946345566270 | m=451343619108439200 | logM=40.65
tau_R = [2, 8, 8, 8, 4, 8]
Проверено: 10001 | Полных: 1 | Плотность: 9.999 e-5
Частоты по позициям (τ=T):
  pos 0 (τ_R=2):  11.8%
  pos 1 (τ_R=8):  30.5%
  pos 2 (τ_R=8):  16.0%
  pos 3 (τ_R=8):  28.7%
  pos 4 (τ_R=4):  22.4%
  pos 5 (τ_R=8):  25.3%
Расчёт ожидаемой вероятности полной цепочки:
  Ожидаемая (prod pos): 9.3724 e-5
  Эмпирическая (full/trials): 9.9990 e-5
  Коэффициент корреляции CRT: 1.07
time = 2min, 32,330 ms.
?

Выход годных у моего паттерна ожидается ( как произведение вероятностей мест) в 2,9 раза больше.

 Re: Пентадекатлон мечты
wrest в сообщении #1723055 писал(а):
Погодите, тут я как-то не понял. Если n0 и m не меняется, то получаем ровно те же цепочки.
Но только у меня для паттерна [2299, 3887, 32, 8381, 243, 775]получились
n0=1081619296944347678
m=4423167467262704160
А у вас для паттерна[22990, 11661, 32, 8381, 486, 775] получились
n0=437267946345566270
m=451343619108439200
Ну что-то у Вас не так, у меня одинаково:
Код:
? chinese([Mod(-j+1, [2299,3887,32,8381,243,775][j])|j<-[1..6]])
%1 = Mod(437267946345566270, 451343619108439200)
? chinese([Mod(-j+1, [22990,11661,32,8381,486,775][j])|j<-[1..6]])
%2 = Mod(437267946345566270, 451343619108439200)

wrest в сообщении #1723041 писал(а):
Дал вот эти 4 паттерна (первые два числа n0 и m, затем модули)
...
[437267946345566270, 451343619108439200, 2299, 3887, 32, 8381, 243, 775]
wrest в сообщении #1723055 писал(а):
Но только у меня для паттерна [2299, 3887, 32, 8381, 243, 775]получились
n0=1081619296944347678
m=4423167467262704160
Вам не кажется что у Вас цифры раз от раза не совпадают, а?

wrest в сообщении #1723060 писал(а):
Выход годных у моего паттерна ожидается ( как произведение вероятностей мест) в 2,9 раза больше.
Значит Вы неправильно считаете, или частоты, или n0,m. Потому что при одинаковых n0,m разных частот быть очевидно не может.

 Re: Пентадекатлон мечты
Аватара пользователя
Да, чего тут мудрить-то. wrest, будьте добры — программу в студию.

Исходник же у вас на PARI написан, не на Сях?
Если так и если она не сильно длинная, скорее всего быстро найдём ошибку.

 Re: Пентадекатлон мечты
Yadryara в сообщении #1723070 писал(а):
программу в студию.
без проблем:
код: [ скачать ] [ спрятать ]
Используется синтаксис C++
/* ============================================================================
   УНИВЕРСАЛЬНЫЙ ГЕНЕРАТОР CRT-УСЛОВИЙ v61 (gp2c-strict, исправлен Этап 2 для T>=48)
   ============================================================================ */


is_power_of_2(n) = {
    if(n <= 0, return(0));
    my(m = n);
    while(m % 2 == 0, m = m \ 2);
    return(m == 1);
}

analyze_chains_v61(res, k_max, verbose) = {
    my(rows, row, L, T, x0, M, conds, tau_R_vec, total_trials, full_chains);
    my(pos_hits, match_dist, matches, i, k, n, tau_val, emp_density, avg_indiv);
    my(naive_theory, corr_est, r_total, r_p, pct, r_m, update_freq, expected_prob, p_i);

    rows = matsize(res)[1];
    if(rows == 0 || res[1,4] == 0,
        if(verbose >= 1, print("Пустой пул."));
        return(0)
    );
   
    for(row = 1, rows,
        if(res[row,5] <= 0, next);
        L = res[row,1]; T = res[row,2]; x0 = res[row,3]; M = res[row,4];
        conds = vector(L, j, res[row, 5+j]);
        tau_R_vec = vector(L, j, T \ numdiv(conds[j]));
       
        total_trials = 0; full_chains = 0;
        pos_hits = vector(L); match_dist = vector(L+1);
        update_freq = max(1, (k_max + 1) \ 100);
       
        for(k = 0, k_max,
            n = x0 + k * M;
            total_trials = total_trials + 1;
            matches = 0;
            for(i = 0, L-1,
                tau_val = numdiv(n + i);
                if(tau_val == T,
                    matches = matches + 1;
                    pos_hits[i+1] = pos_hits[i+1] + 1
                )
            );
            match_dist[matches+1] = match_dist[matches+1] + 1;
            if(matches == L, full_chains = full_chains + 1);
           
            if(verbose >= 1 && k % update_freq == 0,
                printf("\r[Анализ системы %d: %3d%%]", row, 100 * k \ (k_max + 1));
            );
        );        if(verbose >= 1, print(""));

        if(verbose >= 1,
            print("\n========================================");
            printf("СИСТЕМА #%d | x0=%d | M=%d | logM=%.2f\n", row, x0, M, log(M));
            printf("tau_R = %s\n", Str(tau_R_vec));
            r_total = real(total_trials);
            emp_density = if(total_trials > 0, real(full_chains) / r_total, 0.0);
            printf("Проверено: %d | Полных: %d | Плотность: %.3e\n", total_trials, full_chains, emp_density);
           
            print("Частоты по позициям (τ=T):");
            for(i = 1, L,
                if(verbose >= 1,
                    r_p = real(pos_hits[i]);
                    pct = r_p / r_total * 100.0;
                    printf("  pos %d (τ_R=%d): %5.1f%%\n", i-1, tau_R_vec[i], pct)
                )
            );
           
            expected_prob = 1.0;
            print("Расчёт ожидаемой вероятности полной цепочки:");
            for(i = 1, L,
                if(r_total > 0, p_i = real(pos_hits[i]) / r_total, p_i = 0.0);
                expected_prob = expected_prob * p_i;
            );
            printf("  Ожидаемая (prod pos): %.4e\n", expected_prob);
            printf("  Эмпирическая (full/trials): %.4e\n", emp_density);
           
            if(expected_prob > 1e-50 && emp_density > 0,
                printf("  Коэффициент корреляции CRT: %.2f\n", emp_density / expected_prob);
            , print("  Коэффициент корреляции CRT: N/A");
            );
           
            if(full_chains == 0, print("⚠ Нет цепочек."))
        )
    );
    return(1)
}

generate_crt_pool_v61(L, T, max_logLcm, max_mod, K, seed, strict_composite, max_tau_R, verbose) = {
    my(pool_conds, pool_lcm, pool_scores, primes, num_primes);
    my(i, j, k, p_idx, r, conflicts, best_cnt, best_off_cnt, best_offs, best_off);
    my(i_pos, target_pos, pos_count, p_big, e, needed, new_val, new_lcm, new_tau, new_tau_R, found, p_used, skip, worst_bad);
    my(x, M_crt, crt_ok, g, mi, ai, score_sum, tau_R_i, cur_tau, result, tmp, c, tau_R, all_ok, w, logM_factor, is_ok, p_pow, a);
    my(unique_cnt, is_dup, tmp_M, tmp_x0, base_i, step_i, trap_tau, reject_reason, budget_phase2, max_a, max_a_2, max_a_3);
    my(best_e, score, best_score, v2_global, v2_mi);

    if(!strict_composite, strict_composite = 1);
    if(!max_tau_R, max_tau_R = 8);
    if(max_tau_R > T \ 2, max_tau_R = T \ 2);    while(max_tau_R > 1 && !is_power_of_2(max_tau_R), max_tau_R = max_tau_R - 1);
    if(max_tau_R < 2, max_tau_R = 2);

    /* Паритетная безопасность: 2^5 только для T<48 */
    max_a_2 = if(T < 48, 5, 3);
    max_a_3 = 3;
    budget_phase2 = max_logLcm * 0.85;

    num_primes = primepi(max(3000, L+500));
    primes = primes(num_primes);

    setrand(seed);
    pool_conds = matrix(K, L, i, j, 1);
    pool_lcm   = vector(K, j, 1);
    pool_scores = vector(K, j, 0.0);
    best_offs = vector(60);
   
    if(verbose >= 1, printf("v61: L=%d, T=%d, max_logLcm=%.1f, K=%d, strict=%d, max_tau_R=%d, 2^a<= %d\n", L, T, max_logLcm, K, strict_composite, max_tau_R, max_a_2));

    /* Этап 2: Малые простые (ИСПРАВЛЕНО: проверка только на делимость T) */
    if(verbose >= 1, print("Этап 2: Малые простые"));
    for(p_idx = 1, num_primes,
        if(primes[p_idx] > min(L, 60), break);
        p = primes[p_idx];
        for(k = 1, K,
            best_off_cnt = 0; best_cnt = L+1;
            for(r = 0, p-1,
                conflicts = 0;
                forstep(i_pos = r, L-1, p,
                    cur_tau = numdiv(pool_conds[k,i_pos+1]*p);
                    /* Убрана проверка is_power_of_2, разрешены промежуточные tau_R */
                    if(T % cur_tau != 0, conflicts = conflicts + 1);
                );
                if(conflicts < best_cnt, best_cnt = conflicts);
                if(conflicts < best_cnt, best_off_cnt = 0);
                if(conflicts == best_cnt, best_off_cnt = best_off_cnt + 1);
                if(conflicts == best_cnt, best_offs[best_off_cnt] = r);
            );
            if(best_off_cnt == 0, next);
            best_off = best_offs[random(best_off_cnt)+1];
            forstep(i_pos = best_off, L-1, p,
                cur_tau = numdiv(pool_conds[k,i_pos+1]*p);
                tau_R = T \ cur_tau;
                is_ok = (T % cur_tau == 0);
                if(strict_composite && tau_R == 2, is_ok = 0);
                if(is_ok,
                    pool_conds[k,i_pos+1] = pool_conds[k,i_pos+1] * p;
                    pool_lcm[k] = lcm(pool_lcm[k], p);
                );
            );            pos_count = 0;
            forstep(i_pos = best_off, L-1, p, pos_count = pos_count + 1);
            if(pos_count == 1, target_pos = best_off + 1,
               pos_count > 1, target_pos = best_off + p * (pos_count \ 2) + 1,
               target_pos = 0);
            if(target_pos > 0,
                if(p == 2, max_a = max_a_2,
                   if(p == 3, max_a = max_a_3,
                      max_a = 2));
                p_pow = 1;
                for(a = 1, max_a,
                    p_pow = p_pow * p;
                    new_val = pool_conds[k,target_pos] * p_pow;
                    new_tau = numdiv(new_val);
                    new_tau_R = T \ new_tau;
                    if((max_mod == 0 || new_val <= max_mod) && (T % new_tau == 0),
                        if(!strict_composite || new_tau_R != 2,
                            new_lcm = lcm(pool_lcm[k], p_pow);
                            if(log(new_lcm) <= budget_phase2,
                                pool_conds[k,target_pos] = new_val;
                                pool_lcm[k] = new_lcm;
                            );
                        );
                    );
                );
            );
        );
    );

    /* Этап 3: Добивка (жестко требует степени двойки) */
    if(verbose >= 1, print("Этап 3: Добивка"));
    for(k = 1, K,
        setrand(seed + k * 7919);
        while(log(pool_lcm[k]) < max_logLcm,
            target_pos = 0; worst_bad = 0;
            for(i = 1, L,
                cur_tau = numdiv(pool_conds[k,i]);
                if(T % cur_tau == 0,
                    tau_R = T\cur_tau;
                    if(!is_power_of_2(tau_R) || tau_R > max_tau_R,
                        if(tau_R > worst_bad, worst_bad = tau_R; target_pos = i);
                    );
                );
            );
            if(target_pos == 0, break);
            needed = T \ numdiv(pool_conds[k, target_pos]);
            found = 0;
            skip = random(2);
            p_big = nextprime(L+1);
            while(skip > 0, p_big = nextprime(p_big+1); skip = skip - 1);            
            while(p_big < 50000 && found == 0,
                p_used = 0;
                for(j = 1, L, if(pool_conds[k,j] % p_big == 0, p_used = 1));
                if(p_used == 0,
                    best_e = 0; best_score = -1e9;
                    for(e = 1, 3,
                        if(needed % (e+1) == 0,
                            new_val = pool_conds[k,target_pos] * p_big^e;
                            new_lcm = lcm(pool_lcm[k], p_big^e);
                            new_tau = numdiv(new_val);
                            new_tau_R = T \ new_tau;
                            if((max_mod == 0 || new_val <= max_mod) && log(new_lcm) <= max_logLcm,
                                score = 0.0;
                                if(is_power_of_2(new_tau_R) && new_tau_R <= max_tau_R, score = score + 5000.0);
                                if(new_tau_R == 4, score = score + 2000.0);
                                if(new_tau_R == 8, score = score + 800.0);
                                if(new_tau_R == 16, score = score + 300.0);
                                score = score - real(log(new_lcm)) * 10.0;
                                if(score > best_score, best_score = score; best_e = e);
                            );
                        );
                    );
                    if(best_e > 0,
                        e = best_e;
                        new_val = pool_conds[k,target_pos] * p_big^e;
                        new_lcm = lcm(pool_lcm[k], p_big^e);
                        new_tau = numdiv(new_val);
                        new_tau_R = T \ new_tau;
                        pool_conds[k,target_pos] = new_val;
                        pool_lcm[k] = new_lcm;
                        found = 1;
                    );
                );
                if(found == 0, p_big = nextprime(p_big+1));
            );
            if(found == 0, pool_scores[k] = -1.0; break);
        );
    );

    /* Этап 4: CRT + Жесткий фильтр ловушек + Бюджет-скор */
    if(verbose >= 1, print("Этап 4: CRT + стабильность + фильтр"));
    result = matrix(K, 5+L);
    for(k = 1, K,
        if(pool_scores[k] < 0, next);
        reject_reason = "";
        x = Mod(0,1); M_crt = 1; crt_ok = 1; all_ok = 1; score_sum = 0.0;
        for(i = 1, L,
            mi = pool_conds[k,i];
            if(mi == 1, next);            ai = Mod(-i+1, mi); g = gcd(M_crt, mi);
            if(g > 1, if((lift(x)-lift(ai))%g != 0, crt_ok = 0; reject_reason = "CRT incompatible"));
            if(crt_ok == 0, break);
            x = chinese(x, ai); M_crt = lcm(M_crt, mi));
        if(crt_ok == 0 || M_crt == 0,
            pool_scores[k] = -1.0; next;
        );
       
        /* Жесткая проверка паритетных ловушек */
        if(T >= 36,
            v2_global = valuation(M_crt, 2);
            for(i = 1, L,
                mi = pool_conds[k,i];
                if(mi % 2 == 0,
                    v2_mi = valuation(mi, 2);
                    if(v2_mi >= 5 && v2_global == v2_mi,
                        reject_reason = "parity trap (v2_Mi == v2_LCM)";
                        all_ok = 0; break;
                    );
                );
            );
        );
        if(all_ok == 0, pool_scores[k] = -1.0; next);

        /* Финальный скоринг (только степени двойки) */
        for(i = 1, L,
            cur_tau = numdiv(pool_conds[k,i]);
            if(T % cur_tau != 0, all_ok = 0; break);
            if(cur_tau >= T, all_ok = 0; break);
            tau_R_i = T\cur_tau;
            if(!is_power_of_2(tau_R_i) || tau_R_i > max_tau_R, all_ok = 0; break);
           
            w = 0.0;
            if(tau_R_i == 4, w = 1.0);
            if(tau_R_i == 8, w = 0.6);
            if(tau_R_i == 16, w = 0.25);
            score_sum = score_sum + w;
        );
        if(all_ok == 0, pool_scores[k] = -1.0; next);
       
        if(M_crt > 1,
            pool_scores[k] = real(score_sum) / real(log(M_crt));
            if(log(M_crt) > 45.0, pool_scores[k] = pool_scores[k] * (1.0 - 0.02*(log(M_crt)-45.0)));
        , pool_scores[k] = 0.0);
       
        result[k,1] = L; result[k,2] = T; result[k,3] = lift(x); result[k,4] = M_crt; result[k,5] = pool_scores[k];
        for(i = 1, L, result[k,5+i] = pool_conds[k,i]));

    /* Этап 5: Сортировка и дедуп */
    if(verbose >= 1, print("Этап 5: Сортировка и дедуп"));    for(i = 1, K-1, for(j = i+1, K,
        if(result[j,5] > result[i,5],
            tmp = vector(5+L);
            for(c = 1, 5+L, tmp[c] = result[i,c]);
            for(c = 1, 5+L, result[i,c] = result[j,c]);
            for(c = 1, 5+L, result[j,c] = tmp[c]))));
    if(verbose >= 1, print("Топ-5 (tau_R):"));
    for(k = 1, 5,
        if(result[k,5] > 0,
            printf("  #%d: M=%-12d logM=%.2f tau_R=%s\n", k, result[k,4], log(result[k,4]), Str(vector(L, i, T\numdiv(result[k,5+i]))))));
    unique_cnt = 0;
    for(i = 1, K,
        if(result[i,5] > 0,
            is_dup = 0; tmp_M = result[i,4]; tmp_x0 = result[i,3];
            for(j = 1, unique_cnt,
                if(result[j,4] == tmp_M && result[j,3] == tmp_x0, is_dup = 1; break));
            if(is_dup == 0,
                unique_cnt = unique_cnt + 1;
                for(c = 1, 5+L, result[unique_cnt, c] = result[i, c])));
        );
    for(i = unique_cnt+1, K, for(c = 1, 5+L, result[i, c] = 0));
    if(verbose >= 1, printf("Уникальных систем: %d из %d\n", unique_cnt, K));
    return(result)
}

search_chains_fast_v61(res, target, max_k, verbose) = {
    my(rows, found, k, n, i, ok, L, T, x0, M, checked, batch, row);
    rows = matsize(res)[1];
    found = 0; checked = 0;
    if(max_k > 0, batch = max_k \ 20, batch = 1000);
    if(batch < 1000, batch = 1000);
    for(row = 1, rows,
        if(res[row,5] <= 0, next);
        L = res[row,1]; T = res[row,2]; x0 = res[row,3]; M = res[row,4];
        if(verbose >= 1, printf("Система %d (score=%.4f): ", row, res[row,5]));
        for(k = 0, max_k,
            checked = checked + 1;
            n = x0 + k*M; ok = 1;
            for(i = 0, L-1,
                if(numdiv(n+i) != T, ok = 0);
                if(ok == 0, break);
            );
            if(ok,
                found = found + 1;
                if(verbose >= 1, printf("\n  [✓ #%d] k=%7d n=%d", found, k, n));
                if(found >= target, return(found));
            );
            if(verbose >= 1 && checked % batch == 0, printf("."));
        );
        if(verbose >= 1, print(""));    );
    if(verbose >= 1, printf("Завершено. Найдено: %d из %d\n", found, target));
    return(found)
}

:D Я её ещё не запускал, кстати. Та с которой хорошие паттерны выпали для D(48,6), была 59 версия, а это 63-я, исправленная.

-- 23.04.2026, 08:06 --

Dmitriy40 в сообщении #1723061 писал(а):
Вам не кажется что у Вас цифры раз от раза не совпадают, а?

А.... вот блин. Не от того паттерна n0 и m дал.
Dmitriy40 в сообщении #1723061 писал(а):
Значит Вы неправильно считаете, или частоты, или n0,m. Потому что при одинаковых n0,m разных частот быть очевидно не может.

Да. Не оттуда скопипастил. :facepalm: Тот который получше (где частоты получше) это был вот такой:
v = [2299,1127,160,4901,243,8959]
Но с той же проблемой - не расставлены двойки.
Генератор их не ставит туда потому, как я понял, что ему надо экономить бюджет в целом и размер каждого модуля. И Квен приводит прям такую аргументацию что ставить двойки не надо ибо они сами туда залетают и так, что я ещё не придумал как возразить...

В чем-то он прав, оставляя t_R=8 то есть залететь должно pqr, туда в качестве p залетает как раз двойка. А для четверки пока нет места на длине цепочки 6 и поставленной 2^5 посередине.

 Re: Пентадекатлон мечты
Аватара пользователя
wrest в сообщении #1723060 писал(а):
Код:
tau_R = [8, 8, 8, 8, 8, 8]
Проверено: 10001 | Полных: 5 | Плотность: 5.000 e-4
Частоты по позициям (τ=T):
pos 0 (τ_R=8): 31.1%
pos 1 (τ_R=8): 29.9%
pos 2 (τ_R=8): 14.4%
pos 3 (τ_R=8): 28.6%
pos 4 (τ_R=8): 24.0%
pos 5 (τ_R=8): 29.4%



Вот, кстати, прекрасная иллюстрация к полезности фильтрации по запрещенным остаткам.
Казалось бы, в каждой позиции $\tau_R = 8$, а значит и вероятность успеха в каждой позиции должна быть примерно равной.
А тут наблюдается разброд и шатание.
Но, посмотрим, к примеру, на позицию
Код:
pos 2
, в этой позиции в паттерне стоит $32$ - максимальная степень двойки. А значит запрещенные остатки по модулю $2$ "бракуют" цепочки именно в этой позиции.
После фильтрации по запрещенным остаткам вероятности подрастут, и их величина выровняется вблизи значения 30-31%. Конечно, вероятность надо будет считать как количество успехов поделить на количество цепочек-кандидатов, прошедших этот фильтр.

Теперь к установке необязательных простых в первой степени в паттерн.
1. Идея совершенно понятна: если вероятность $pqr$ больше, чем $pqrs$, то давайте в места с $pqrs$ добавим (относительно) малое простое в первой степени и сдвинем вероятность вверх. Но ценой роста LCM.
Для длинных цепочек с $k=48$ я это ( $pqrs \to pqr$,) проверял. Не окупается из-за роста LCM.
А вот для цепочек с $k=96, 192$ переходы $pqrst \to pqrs$ и-или $pqrstu \to pqrst$ вроде бы окупаются. Но это более точно может, наверное, прокомментировать уважаемый VAL.

2. Для таких подстановок правильнее использовать минимальные свободные простые числа (после подстановок квадратов). А у Вас генератор 31 подставил, но для такой короткой цепочки 31 не было минимальным свободным. Тут должен бы был сработать "бюджет" по LCM, кстати.

 Re: Пентадекатлон мечты
EUgeneUS в сообщении #1723075 писал(а):
2. Для таких подстановок правильнее использовать минимальные свободные простые числа (после подстановок квадратов). А у Вас генератор 31 подставил, но для такой короткой цепочки 31 не было минимальным свободным. Тут должен бы был сработать "бюджет" по LCM, кстати.

Он их пока случайно выбирает, если слишком уж большое выпало, бракует
по бюджету. Чтобы разнообразие было.

 Re: Пентадекатлон мечты
Аватара пользователя
wrest, благодарю. Не на PАRI.

wrest в сообщении #1723060 писал(а):
Выход годных у моего паттерна ожидается ( как произведение вероятностей мест) в 2,9 раза больше.

Ну так ничего удивительного. Особенно если речь о разных сериях. Для коротких цепочек стратегия максимизации pqr может быть не оптимальной. По той простой причине, что и n, и особенно частные — маловаты и обгон pq pqr-ами мог ещё не состояться.

 Re: Пентадекатлон мечты
Yadryara в сообщении #1723077 писал(а):
благодарю. Не на PАRI.

В смысле?

-- 23.04.2026, 10:29 --

Dmitriy40 в сообщении #1723054 писал(а):
В итоге вместо всех 6 мест pqr получились места p, pq, pqr, pqr, pq, pqr. Вы точно хотели этого?

Насколько я пока понял, идеальный паттерн -- это если мы хотим, чтобы случайно залетали pq, т.к. таких около трети от всех - максимальная частота. Но я пока не понял до каких размеров чисел это так.

 Re: Пентадекатлон мечты
Аватара пользователя
wrest в сообщении #1723078 писал(а):
идеальный паттерн -- это если мы хотим, чтобы случайно залетали pq,


pqr, скорее

 Re: Пентадекатлон мечты
Аватара пользователя
Меня несколько отвлекло "Используется синтаксис C++". Гораздо чаще PARI-программы просто в [ c o d e][/ c o d e] постим. Вы посмотрели программу с конца 1-й страницы?

wrest в сообщении #1723078 писал(а):
Но я пока не понял до каких размеров чисел это так.

Ну так я же специально таблицы совсем недавно постил. pqr вырываются на 1-е место где-то на высоте 1e23 — 1e29, если смотреть по частному.

Yadryara в сообщении #1722752 писал(а):
Код:
first
free
prime    10^       1e6         2       4       8      16

   53     25    138684       128     319     323     168
   59     25    136068       130     323     323     164
   61     26    133774       125     322     323     168
   67     27    131581       123     319     324     170
   71     27    129629       125     321     323     168

 Re: Пентадекатлон мечты
Yadryara в сообщении #1723081 писал(а):
Вы посмотрели программу с конца 1-й страницы?

Нет, а надо? :roll:

-- 23.04.2026, 11:50 --

Yadryara в сообщении #1723081 писал(а):
Ну так я же специально таблицы совсем недавно постил.

Не сомневаюсь что вы писали и об этом. Но я или не читал (я тут примерно с 300-й страницы) или не понял или не запомнил. Вот для того и нужен свод практивеаких знаний в одном месте на пяти листах, а не куча разрозненных постоу и статей в интернетах. Нужен cheat-sheet (шпаргалка) начинающего паттерностроителя.
Yadryara в сообщении #1723081 писал(а):
pqr вырываются на 1-е место где-то на высоте 1e23 — 1e29, если смотреть по частному.

Ага, это интересно, надо записать в ТЗ. А то я уж сам хотел начать смотреть.

 Re: Пентадекатлон мечты
EUgeneUS в сообщении #1723033 писал(а):
А это утверждение доказано в предположении о справедливости гипотезы Диксона или гипотезы Шинцеля?
Насколько я помню, Дюнш и Эгглтон доказывают, ссылаясь на гипотезу Шинцеля. Но это, если меня память не подводит. Надо будет заглянуть, освежить.

 [ Сообщений: 4677 ]  На страницу Пред.  1 ... 308, 309, 310, 311, 312


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group