Проект Эйлера Задача 245

Сейчас я занимаюсь проблемой 245, но столкнулся с некоторыми проблемами. Я уже проделал над этим некоторую работу, но не чувствую, что сделал какие-то реальные шаги к ее решению. Вот что у меня есть:

Нам нужно найти n=ab с положительными целыми числами a и b. Мы также можем считать gcd(a, b) = 1 без ограничения общности и, таким образом, phi(n) = phi(ab) = phi(a)phi(b).

Мы пытаемся решить:

  \frac{n-\phi(n)}{n-1}=\frac1k

\frac  {n-1}{n-\фи(n)}=k

Следовательно:

n\equiv1\ (\text{mod}n-\phi(n))

В этот момент я подумал, что было бы неплохо увидеть, как эти числа были распределены. Я собрал программу грубой силы, которую использовал для поиска всех (составных) решений до 104:

15, 85, 255, 259, 391, 589, 1111, 3193, 4171, 4369, 12361, 17473, 21845, 25429, 28243, 47989, 52537, 65535, 65641, 68377, 83767, 91759

Главное, как там выглядит не будет слишком много меньше 1011 ограничения, указанного в задаче. Самое интересное/полезное, что я обнаружил, заключалось в том, что k было довольно мало даже для больших значений n. На самом деле самое большое k было всего 138. (Кроме того, кажется, что k всегда четно.)

Учитывая это, я предполагаю, что можно рассмотреть каждое значение k и найти, какое значение (значения) n может быть с этим значением k.

Возвращаясь к исходному уравнению, обратите внимание, что его можно переписать как:

\frac{\phi(n)-1}{n-1}=\frac{k-1}k

Поскольку мы знаем к:

k\cdot\phi(n)\equiv k\ (\text{mod}n-1)

И это все, что у меня есть; Я все еще преследую некоторые из своих маршрутов, но мне интересно, не упускаю ли я смысл! С помощью грубой силы я нашел сумму до 108, что составляет 5699973227 (всего 237 решений для n).

У меня почти закончились идеи; может кто подскажет?


Обновление: много людей проделали большую работу, и вместе мы смогли доказать несколько вещей. Вот список:

n всегда нечетно, а k всегда четно. k ‹= 105,5. n не должно быть квадратным.

Я нашел все решения, когда n=pq (2 простых множителя) с p>q. Я использовал тот факт, что для двух простых чисел q = k+factor(k^2-k+1) и p = k+[k^2-k+1]/factor(k^2-k+1). Мы также знаем для 2 простых чисел k ‹ q ‹ 2k.

Для n с двумя или более простыми делителями все простые числа n больше k.


person Community    schedule 17.05.2009    source источник
comment
Эта проблема Эйлера сбивает с толку, если вы не знаете терминов; они лучше определены в # 243: projecteuler.net/index.php?section=problems&id= 243.   -  person Glenn    schedule 17.05.2009
comment
Вся необходимая информация содержится в ссылке, которую я разместил. Вопрос звучит буквально: найдите сумму всех целых чисел 1‹n‹=10^11, для которых [n-φ(n)]/[n-1] = 1/k для некоторого целого числа k.   -  person    schedule 17.05.2009
comment
Мне удалось немного выяснить: k должно делить n-1 (получите это из манипулирования вашим самым первым уравнением, чтобы в целочисленном числе был член вроде (n-1)/k). выражение), k не (обязательно) делит phi(n) (контрпримеры в вашем списке грубой силы), и n должно быть нечетным (следовательно, k четным) (легко показать, что (k- 1)n = k phi(n) - 1, рассмотрите это выражение по модулю 2 и запомните/докажите, что phi(n) всегда четно при n > 2). Я не вижу, куда идти дальше, и это все время, которое у меня сейчас есть.   -  person kquinn    schedule 18.05.2009
comment
Я не думаю, что обсуждение переполнения стека соответствует духу проекта Эйлера;)   -  person leif    schedule 18.05.2009
comment
Спасибо kquinn. Вы правы насчет k, делящего n-1. Это означало бы, что n = jk+1 = ab для некоторого j. Мне нужно выйти, но я пойду за остальными позже. Спасибо!   -  person    schedule 18.05.2009
comment
kquinn, второе уравнение должно быть: (k-1)(n-1) = k(phi(n)-1) я думаю. Для n › 2 phi(n) четно (mod 2) (k-1)(n-1) = k → n(k-1) = 1. Чтобы это было правдой, n должно быть нечетным, а k четное.   -  person    schedule 18.05.2009
comment
Я дважды проверил то, что я написал выше, и это правильно. Уравнение, которое вы использовали для получения того же вопроса, может быть правильным, а может и нет, я еще не смог проверить. Что-то еще, что вы можете найти или не найти полезным: я доказал, что k и phi(n) являются модулярными инверсиями друг друга по модулю n. Это еще один результат, который тривиально следует из (k-1)n = k phi(n) - 1.   -  person kquinn    schedule 21.05.2009
comment
О да. Ваш результат подразумевает мой результат, а мой результат подразумевает ваш. На самом деле ваш результат в сочетании с теоремой Эйлера подразумевает phi(n) = k^[phi(k-1)-1] (mod k-1). Таким образом, для любого k мы можем вывести, каким должно быть значение phi(n) по модулю.   -  person    schedule 21.05.2009
comment
Реклама проекта Эйлера и ничего более.   -  person Bogdan Gusiev    schedule 28.05.2009


Ответы (6)


Умножьте простые числа. Что я сделал, так это сначала проверил каждый продукт с двумя простыми числами; сохранить те, которые являются успехами. Затем, используя сохраненные продукты, проверьте те, у которых больше простых чисел (каждый продукт с тремя простыми числами, показанный в вашем переборе, имеет подмножество из двух простых чисел, которое работает). Используйте эти сохраненные продукты и повторите попытку с 4 простыми числами, 5 простыми числами и т. д.

Единственным недостатком является то, что вам нужно хорошее сито или список простых чисел.

Вот список для N‹=(10^7):

2 простых числа 15,85,259,391,589,1111,3193,4171,4369,12361,17473,25429,28243,47989,52537,65641, 68377,83767,91759,100777,12370892,1263019,1860897,1840897,1840019 , 286357,291919,316171,327316171,327937, 346063353029 360301,404797,40301,404797406867 524851 531721 558513 563767 633727 705667773 8607 910489 970141 10135394218423869, 1233823,12618 07,1264693,1455889,1487371,1529641,1574383,1612381,1617379,1657531,1793689,20163 79,2095087,2130871,2214031,2299459,2500681,2553709,2609689,2617963,2763697,30475 21,3146677,3397651 , 3514603,3539017,3820909,3961219,4078927,4186993,4197901,44997 07,4552411,4935883,4975687,5103841,5299351,5729257,5829877,5864581,6017299,62364 01,6802531,6856609,8759011,9059233,9203377,9301603 ,9305311,9526747,9536899,95832 79,9782347,9900217 3 простых числа 255,21845,335923,3817309 4 простых числа 65535 5 простых чисел 83623935

person Community    schedule 19.05.2009
comment
Единственная проблема, которую я вижу, это вычисление всех 2-простых продуктов. Однако доказуемо, что если n=pq, то (pq-1)/(p+q-1) = k, что я могу исследовать. Большое спасибо! - person ; 19.05.2009
comment
Хорошо, я попробовал то, что вы сказали, но такие числа, как 3902867 = 53x211x349, не найдены. Тем не менее, я могу расширить метод, который я использовал для нахождения 2-простых чисел, на поиск большего количества простых чисел — я попробую. - person ; 20.05.2009

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

Суть в том, чтобы учиться и придумывать решения самостоятельно, а также изучать новые концепции.

person Dmitri Farkov    schedule 26.05.2009
comment
С домашней страницы: Следует поощрять использование Интернета для исследования проблемы, поскольку под поверхностью многих из этих задач могут быть обнаружены скрытые сокровища математики. - person Marc Gravell; 26.05.2009
comment
Когда вы пробовали и потратили много усилий на решение проблемы, как, очевидно, PythonPower, нет смысла продолжать биться головой о стену — вы достигаете стадии, когда вам больше нечему научиться самостоятельно. В этот момент мудрее всего будет попросить о помощи и искать знания, а не сдаваться. :П - person ShreevatsaR; 26.05.2009
comment
Исследования поощряются, а не требуют решения головоломки. Я имею в виду, что я вижу это больше, когда вы понимаете, читая, что определенная проблема требует знания закона Байеса, поэтому вы просите людей помочь в реализации программы классификации Байеса, а не просите решения всей головоломки. - person Dmitri Farkov; 27.05.2009
comment
И исследования - это именно то, чем он занимается. Он показал свою работу, отследил все намеки и предположения и доказал/опроверг их. Чего еще вы ожидаете от кого-то до (или даже после) обращения за помощью? Как можно изучать новые концепции, не сталкиваясь с ними? - person ShreevatsaR; 27.05.2009

Позвольте мне продолжить то, что начал кувшин, но попробуйте несколько иной подход. Цель снова состоит в том, чтобы просто найти числа, которые имеют два разных множителя n=pq. Как вы уже заметили, мы ищем такие числа, что n-phi(n) делит n-1. То есть, если n=pq, то это означает, что мы ищем такие p,q, что

  p+q-1 divides pq-1

Предположим, что мы фиксируем p и ищем все простые числа q, удовлетворяющие приведенному выше уравнению. Приведенное выше уравнение не выглядит очень простым для решения, поэтому следующим шагом будет максимально возможное устранение q. В частности, мы используем, что если a делит b, то a также делит b + ka для любого целого k. Следовательно

  p+q-1 divides pq - 1 - p(p+q-1)

а его упрощение приводит к условию

  p+q-1 divides p^2 - p + 1.

Можно предположить, что p — меньший простой множитель числа n. Тогда p меньше квадратного корня из 1011. Следовательно, можно найти все числа с двумя множителями путем перебора всех простых чисел p, меньших квадратного корня из 1011, затем найти делители p^2-p+1, найти q и проверить если q простое число и pq является решением задачи.

Это, конечно, по-прежнему оставляет целые числа с более чем двумя простыми множителями. Здесь тоже работает несколько похожий подход, но он более сложен и требует дальнейшей оптимизации.

Один вопрос, на который я не могу ответить, заключается в том, почему эта проблема сформулирована так сложно. Разве авторы не могли просто запросить сумму составных целых чисел, где n-phi(n) делит n-1. Так что, возможно, мне не хватает большого намека.


Теперь, когда известны решения с двумя простыми множителями, я попытаюсь найти потенциальный алгоритм для поиска решений с более чем двумя простыми множителями. Цель состоит в том, чтобы найти алгоритм, который по заданному составному целому числу m находит все простые числа q, такие что mq является решением. т. е. q должно быть таким, чтобы

  mq - phi(mq) divides mq - 1.

Позволять

  F = mq - phi(mq).

Тогда конечно

  F = (m-phi(m)) q + phi(m).

Как и в случае двух простых множителей, можно найти условие для F, исключив q из левой части приведенного выше уравнения. Поскольку F делит mq-1, оно также делит

  (m-phi(m))(mq - 1) 

и, следовательно, также

  m F - (m-phi(m))(mq - 1)  = m phi(m) + m - phi(m).

Таким образом, найдя все делители F числа m phi(m) + m - phi(m) и проверив, является ли (F - phi(m))/(m - phi(m)) простым, можно найти все решения mq для данного m. Поскольку только те дивизоры F, которые удовлетворяют

 F == phi(m) (mod m - phi(m))

может привести к новым решениям, этот факт иногда можно использовать для оптимизации факторизации m phi(m) + m - phi(m).

person Accipitridae    schedule 27.05.2009
comment
Я сделал это не совсем так, но я уже нашел все 2-простые решения. Что касается сложного вопроса; Я думаю, что это относится ко многим вопросам, таким как 241, который содержит нерелевантную информацию! - person ; 27.05.2009
comment
Прекрасная работа. Это, безусловно, приближается. Однако такие числа, как 3902867 = 53x211x349, все равно останутся ненайденными. Это потому, что никакое составное число не может быть дополнено простым числом, чтобы получить его. - person ; 28.05.2009
comment
Не совсем. При m = 53*211 в качестве входных данных моя программа действительно находит q = 349. Хотя проблема заключается в том, чтобы найти хороший критерий для выбора значений m, которые необходимо проверить. Например. если m и phi(m) не взаимно просты, то их не нужно проверять. Я могу предположить, что q является наибольшим простым множителем, поэтому мне не нужно проверять все m до 10 ^ 11, но это все равно может быть большое число. - person Accipitridae; 28.05.2009
comment
Хорошая мысль Accipitridae! Я нашел все 2-простые решения, поэтому предположим, что m = pq (p‹q). Мы хотели бы расширить m на значение r с помощью q‹r. Итак, m › pq^2 ‹ 10^11. Что делает p‹q‹10^5,5. Но на практике это слишком медленно. - person ; 28.05.2009
comment
На самом деле, 10^11 > n = pqr > p^3 означает p ‹ 10^(11/3) ‹ 4642. Это довольно мало. И у нас есть q ‹ sqrt(10^11/p) ‹ 10^5,5... ну ладно, это не настолько мало, но может работать. Настоящая проблема мне кажется, что m phi(m) + m - phi(m) слишком велико, чтобы его можно было разложить на множители. - person ShreevatsaR; 28.05.2009
comment
О, кстати, отличная манипуляция с избавлением от q, это было умно! :) - person ShreevatsaR; 28.05.2009
comment
Мы могли бы использовать алгоритм Шенкса для факторизации - это всего лишь O (n ^ 0,25). Я понял, что могу получить немного более низкие оценки после публикации, но, как вы говорите, проблема заключается в факторизации. - person ; 28.05.2009
comment
Алгоритм Шанкса - хороший выбор. Я также подумываю просто использовать какое-то пробное деление, чтобы найти пары F * G = m phi (m) + m - phi (m), такие что F (и, следовательно, также G) конгруэнтны phi (m) по модулю m - фи(м). Существует алгоритм Lenstra, который работает очень быстро, когда m-phi(m) достаточно велико. - person Accipitridae; 28.05.2009

Чтобы не отдавать слишком много, я бы предложил две вещи:

  1. Проанализируйте последовательность чисел, которую вы произвели методом грубой силы: все они имеют общую характеристику. Если вы обнаружите, что это такое, у вас может быть шанс найти решение методом грубой силы.

  2. Найдите более сложный алгоритм факторинга. Или еще лучше: вместо того, чтобы находить множители по числам, строить числа по множителям...


РЕДАКТИРОВАТЬ: Образцы, которые вы найдете, только добавят к вашему пониманию и, надеюсь, покажут вам, как вы могли бы достичь такого же объема знаний путем адекватного манипулирования аналитическим выражением. Боюсь, не зная этой закономерности, пути к решению нет. Кроме того, это, вероятно, одна из самых сложных задач Project Euler, поэтому вам не нужно беспокоиться о том, чтобы найти решение без большого труда и пота...

person Community    schedule 18.05.2009
comment
1. Не было бы идеально, так как я ищу понимание, а не счастливые догадки! - person ; 18.05.2009
comment
2. Больше того, что я пытаюсь сделать, но не могу. - person ; 18.05.2009

прямой помощи в решении этой задачи нет, но может быть интересно для будущих математических проектов: вместо использования WolframAlpha для анализа последовательности я бы рекомендовал "Интерактивная энциклопедия целочисленных последовательностей" на сайте research.att.com.

Получайте удовольствие, решая все задачи Эйлера!

person Community    schedule 27.05.2009
comment
OEIS переехал. Ссылка больше не работает. Воспользуйтесь этой ссылкой сейчас: oeis.org/A160599 - person Stefan Gruenwald; 04.02.2016

Я не нашел полного решения, но я хотел бы поделиться своими мыслями. Возможно, кто-то мог бы помочь.

Я считаю, что нужно попытаться свести проблему к

O(sqrt(n)
(источник: texify.com)

сложность. Для повышения эффективности поиска можно использовать следующие факты:

  • Любое решение должно быть нечетным числом
  • Любое решение должно быть кратно различным простым числам (множители квадратных чисел не допускаются)

Другие указывали на это, и их легко доказать, используя только основные свойства функции totient.

Я начну с анализа всех простых и составных чисел до sqrt(10^11). Это несложная задача, и требуемое время должно быть значительно меньше требуемой 1 минуты. Все решения выше квадратного корня имеют вид:

a*b, where at least one of a,b < sqrt(10^11)

При повторении диапазона 0..sqrt(10^11) я буду искать кратные числа в итерации, которые являются решениями. Я расскажу только о случае умножения числа меньше квадратного корня на одно простое число. Набор решений, который я получу таким образом, будет надмножеством набора решений с двумя простыми факторами. Это все равно не будет полным набором решений, так как не будут найдены решения вида p1p2p3, где p1p2,p2p3,p1p3›sqrt(10^11).

Пусть b — число меньше квадратного корня, а a — простое число для его умножения.

b = kb*(b - phi(b)) + mb
(источник: texify.com)

У нас есть:

ab = kb(ab - aphi(b)) + amb
(источник: texify.com)

На основании фактов, что

phi(a) = a - 1 and phi(a)*phi(b) = phi(a*b) if a, b coprime

у нас есть

ab = kb(ab - phi(ab)) - kbphi(b) + amb
(источник: texify.com)

Часть «по модулю» справа может быть записана как:

m = amb - kbphi(b) = (a-1)mb - (kb-1)b
(источник: texify.com)

Позвольте мне временно принять это

0 ‹= m ‹= ab - phi(ab)
(источник: texify.com)

Тогда я мог бы решить приведенное выше уравнение для a (m = 1), проверить, что результат является простым, и тогда у меня будет единственное решение, кратное b. Если m не находится в пределах, чтобы быть фактическим по модулю, тогда мне нужно либо решить уравнение для разных значений k:

(k-1)(ab - phi(ab)) ‹= m ‹= k(ab - phi(ab))
(источник: texify.com)

(значения k должны быть как-то ограничены) или доказать, что в этом случае будет более высокое значение b ‹ sqrt(10^11), чтобы покрыть это.

Существует особый случай для b простого или b составного и mb = 0. В этом случае:

m = -(kb - 1)b
(источник: texify.com)

Это можно рассчитать. Для b простое число:

m = -(b-1)b
(источник: texify.com)

Мне нужно найти простое число a, удовлетворяющее уравнению:

k(ab - (a-1)phi(b)) + m = 1, k = 1,2,...
(источник: texify.com)

Например, пусть b=3, phi(b)=2.

Мне нужно решить:

k[3a-2(a-1)] - 6 = 1 => k(a + 2) = 5

Для k = 1, a = 7, простое число (решение) Для всех других значений k приведенное выше уравнение не может быть выполнено.

person kgiannakakis    schedule 27.05.2009