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

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




 Поиск кубов
Эмпирический поиск кубов , у которых аликвотная сумма делителей является точным квадратом
Задачу нашел тут:
https://www.shyamsundergupta.com/canyoufind.htm#cyf63

Я проверил, что для всех кубов в диапазоне до 10 в 20-й степени (около 4,6 млн) , является ли аликвотная сумма его делителей точным квадратом.
Проверил - не является.
Ничего не нашел.
У меня отработало за 20 минут.
Дальше мое железо отказывается работать.
Можно локально дальше попробовать пари, но там тоже сильно не разгонишься.

(Оффтоп)

Код:
use num_bigint::BigUint;
use num_traits::ToPrimitive;
use std::time::Instant;

const LIMIT: u128 = 10u128.pow(20);   // 10^20

// ==========================================
// ФАКТОРИЗАЦИЯ (для u128)
// ==========================================
fn factorize(mut n: u128) -> Vec<(u128, u128)> {
    let mut factors = Vec::new();
    let mut d: u128 = 2;
    while d * d <= n {
        if n % d == 0 {
            let mut exp = 0;
            while n % d == 0 {
                n /= d;
                exp += 1;
            }
            factors.push((d, exp));
        }
        d += if d == 2 { 1 } else { 2 };
    }
    if n > 1 {
        factors.push((n, 1));
    }
    factors
}

// ==========================================
// АЛИКВОТНАЯ СУММА (BigUint)
// ==========================================
fn aliquot_sum(n: u128) -> BigUint {
    let factors = factorize(n);
    let mut sigma = BigUint::from(1u64);
    for &(p, a) in &factors {
        let p_big = BigUint::from(p);
        let mut power = BigUint::from(1u64);
        for _ in 0..a {
            power *= &p_big;
        }
        let numerator = &power * &p_big - BigUint::from(1u64);
        let denominator = &p_big - BigUint::from(1u64);
        sigma *= numerator / denominator;
    }
    sigma - BigUint::from(n)
}

// ==========================================
// ПРОВЕРКА КВАДРАТА (на лету, без памяти)
// ==========================================
fn is_square(n: u128) -> bool {
    let r = (n as f64).sqrt() as u128;
    r * r == n
}

// ==========================================
// ОСНОВНОЙ ПОИСК
// ==========================================
pub fn main_cyf() {
    let start = Instant::now();
    println!("🔍 Поиск до 10^20 (без памяти, на u128)");

    let max_cbrt = (LIMIT as f64).cbrt() as u128;
    let mut found = false;

    for n in 2..=max_cbrt {
        let cube = n * n * n;
        let s = aliquot_sum(cube);
       
        // Проверяем, является ли аликвотная сумма квадратом (на лету)
        if let Some(val) = s.to_u128() {
            if is_square(val) {
                found = true;
                let k = (val as f64).sqrt() as u128;
                println!("🎯 Найдено! {}^3 = {}  |  Аликвотная сумма = {}", n, cube, s);
                println!("   Аликвотная сумма является квадратом: {} = {}^2", val, k);
                break;
            }
        }

        if n % 100_000 == 0 {
            let elapsed = start.elapsed();
            println!("⏳ Статус: проверено {} кубов ({}%) за {:.2?}", n, (n as f64 / max_cbrt as f64) * 100.0, elapsed);
        }
    }

    let elapsed = start.elapsed();
    println!("\n✅ Поиск завершён за {:?}", elapsed);
    if !found {
        println!("❌ Ничего не найдено до 10^20.");
    }
}



Код:
🏆 [РЕКОРД] n = 4 | куб = 64 | сумма = 63 | ближайший квадрат = 64 | разница = 1 |
...
🏆 [РЕКОРД] n = 51696 | куб = 138156340801536 | сумма = 277229659546224 | ближайший квадрат = 277229659546225 | разница = 1 |
🏆 [РЕКОРД] n = 65536 | куб = 281474976710656 | сумма = 281474976710655 | ближайший квадрат = 281474976710656 | разница = 1 |
...
🏆 [РЕКОРД] n = 705894 | куб = 351737337148656984 | сумма = 788152181388657216 | ближайший квадрат = 788152181388657316 | разница =
100
...
[РЕКОРД] n = 3269290 | куб = 34943012067863089000 | сумма = 48781448672354351000 | ближайший квадрат = 48781448672354345025 | разница = 5975
...


 Re: Поиск кубов
PARI справляется за минуту с тем же нулевым результатом:
Код:
? for(n=2,4.65e6, s=sigma(n^3)-n^3; q=0; if(issquare(s,&q), print(n,"^3=",n^3,": sum=",s,"=",q,"^2")); )
time = 1min, 6,972 ms.

А вот все $n=4^{k>0}$ дают ошибку всегда $1$: $s((4^k)^3)=(4^k)^3-1=(8^k)^2-1$.

-- добавлено через 24 минуты --

$n=51696$ в каком то смысле уникальное: тоже даёт ошибку всего в $-1$, как и степени четвёрки. Другого аналогичного числа пока не нашёл.

 Re: Поиск кубов
До $n<2\cdot10^9$ других аналогичных чисел нет (кроме степеней четвёрок), как нет и точного решения.

С небольшой разницей попадаются, например:
364489^3=48423176869062169: sum=682377274011831 vs 26122352^2=682377274011904, delta=73
705894^3=351737337148656984: sum=788152181388657216 vs 887779354^2=788152181388657316, delta=100
34588806^3=41381545978202345510616: sum=92725315988194144569984 vs 304508318422^2=92725315988194144570084, delta=100
66977604^3=300461493874510612044864: sum=606717040391873981695936 vs 778920432645^2=606717040391873981696025, delta=89
129869401^3=2190385280351022942688201: sum=558358328061410921799 vs 23629607023^2=558358328061410922529, delta=730
387393217^3=58137457724784211156149313: sum=7876474261447128296127 vs 88749502880^2=7876474261447128294400, delta=-1727
437624809^3=83811922490101441860907129: sum=8413927827621117950231 vs 91727464958^2=8413927827621117941764, delta=-8467
1505076757^3=3409384221172968500619970093: sum=176420473477217781353027 vs 420024372480^2=176420473477217781350400, delta=-2627
1694851494^3=4868497502789527746978461784: sum=10909040700695052914525812416 vs 104446353218746^2=10909040700695052914525812516, delta=100

 Re: Поиск кубов
Моя версия пари выдала вот такое:
Код:
🏆 [РЕКОРД] n = 4194304 | куб = 73786976294838206464 | сумма = 73786976294838206463 | ближайший квадрат = 73786976294838206464 | разница = 1
🏆 [РЕКОРД] n = 16777216 | куб = 4722366482869645213696 | сумма = 4722366482869645213695 | ближайший квадрат = 4722366482869645213696 | разница = 1


А вот теперь как это вручную проверить ? :-)
Дипсик говорит, что 4194304 - это 2^22

Для 16777216 - это 2^24
4722366482869645213695 = 2^72−1
Сумма всех делителей числа 2^72 равна:
σ(2^72)=1+2+2^2+⋯+2^72

 Re: Поиск кубов
mathpath
Степени двойки будут давать аликвотную сумму равную степени двойки, минус один. Четные степени - соответственно квадраты двойки минус один. Об этом написано вышее:
Dmitriy40 в сообщении #1729422 писал(а):
А вот все $n=4^{k>0}$ дают ошибку всегда $1$: $s((4^k)^3)=(4^k)^3-1=(8^k)^2-1$.

Насчёт
mathpath в сообщении #1729460 писал(а):
Дипсик говорит, что 4194304 - это 2^22
16777216 - это 2^24
Ну это и так видно (тем кто помнит степени двойки) :mrgreen:

Аликвотная сумма для степеней простых чисел
$s(p^n)=\dfrac{p^n-1}{p-1}$
Для двойки ($p=2$) соответственно $s(2^n)=2^n-1$
У вас в задаче кубы, соответственно для двоек $s(2^{3n})=2^{3n}-1$
При $n$ чётном "ошибка" будет $-1$

 Re: Поиск кубов
Да, кучно пошло:
Код:
🏆 [РЕКОРД] n = 67108864 | куб = 302231454903657293676544 | сумма = 302231454903657293676543 | ближайший квадрат = 302231454903657293676544 | разница = 1


67108864 = 2^26

Но там не только степени двойки, есть и другие составные - моя версия пари нашла пример как у Дмитрия:
Код:
🏆 [РЕКОРД] n = 66977604 | куб = 300461493874510612044864 | сумма = 606717040391873981695936 | ближайший квадрат = 606717040391873981696025 | разница = 89


Пари пропускает некоторые рекорды, которые находит раст.


-- добавлено через 12 минут --

wrest в сообщении #1729461 писал(а):
Аликвотная сумма для степеней простых чисел
$s(p^n)=\dfrac{p^n-1}{p-1}$


Она может быть квадратом ?

 Re: Поиск кубов
mathpath в сообщении #1729462 писал(а):
Она может быть квадратом ?

Нет, не может. См. "Уравнение Нагеля-Лундгрена"
Вернее может, но не для кубов.
Есть [только эти] два решения где аликвотная сумма степени простого - квадрат:
$s(3^5)=11^2$
$s(7^4)=20^2$
Оба числа ( $3^5$ и $7^4$ ) в этих решениях кубами не являются.

 Re: Поиск кубов
mathpath в сообщении #1729462 писал(а):
Пари пропускает некоторые рекорды, которые находит раст.
Это какие?
Я себе поставил ограничение чтобы разница не превышала 0.1% от n и за сутки (в один поток) PARI насчитал мне больше сотни вариантов, я выше показал лишь несколько с самой маленькой разницей.
Так что вопрос лишь как выставить условие ограничения, а то можно для каждого n выводить ближайший квадрат ...

 Re: Поиск кубов
Dmitriy40 в сообщении #1729481 писал(а):
Так что вопрос лишь как выставить условие ограничения, а то можно для каждого n выводить ближайший квадрат ...


У меня раст выводит только в том случае если следующий меньше предыдущего (в процентах), не зашиваясь на конкретный процент
И что интересно - с ростом диапазона он продолжает находить со все меньшим процентом отклонения от ближайшего квадрата
Т.е. процент продолжает уменьшаться - но абсолютная разница увеличивается
Т.е. парадокс

 [ Сообщений: 9 ] 


Соглашение о конфиденциальности | Общие правила

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