• Почему мой код не проходит по времени?

    Adamos
    @Adamos
    А почему, собственно, 11? Или вам сумму КОЛИЧЕСТВ делителей надо? Судя по коду, да.
    Тогда на хрена, собственно, вообще заполнять сет? Что мешает заменить эти вставки простым kol++?

    Не говоря уже о том, что задача, полагаю, гораздо эффективнее решается не перебором чисел, а перебором их потенциальных множителей (подсчетом, сколько раз кратные им числа попадут в заданный диапазон).
    Ответ написан
  • Почему мой код не проходит по времени?

    wataru
    @wataru Куратор тега C++
    Разработчик на С++, экс-олимпиадник.
    У вас не самое эффективное решение. Что-то типа O(n sqrt(n)), когда как задачу можно решить за O(n).

    Сначала решетом эратосфена найдите для каждого числа минимальный простой делитель. У меня даже статья про этот алгоритм есть с кодом и объяснением.

    Потом, решение за O(n log n) - можно быстро найти все простые множители каждого числа используя массив с предущего шага. Считайте степени простых множителей и перемножайте их +1. Так 2^2*3^1 имеет (2+1)(1+1) = 3*2 = 6 делителей (включая 1 и 12. Если они не нужны, вычтите 1-2 в конце).

    Но можно сделать еще быстрее. Фактически применив динамическое программирование. Во втором массиве посчитайте степень минимального простого делителя для каждого числа. Если мнимальный делитель (p[i]) для i равен мнимальному для i/p[i], то степень для i будет 1 + степень для i/p[i]. Иначе она будет 1. Так же посчитайте для каждого числа что там останется, если выкинуть все вхождения минимального делителя. Потом в другом массиве посчитайте для каждого числа количество делителей - это ответ для числа без всех вхождений минимального, умноженный на количество этих минимальных делителей +1. Ну а потом по этому массиву считайте сумму. Это будет работать за O(n).
    Ответ написан
  • Не сохраняется файл после выполнения кода python, что делать?

    Vindicar
    @Vindicar
    RTFM!
    open('text1.txt', 'w', encoding='utf-8')
    Относительный путь. Файл сохраняется где-то в текущем рабочем каталоге, а не рядом с исходным файлом.
    Судя по тому, что для исходного файла ты указываешь полный путь, у тебя текущий рабочий каталог не на рабочем столе.
    Раз уж используешь pathlib, сконструируй полный путь для целевого файла, типа
    srcpath = Path(file_path)
    if srcpath.is_file() and srcpath.suffix == '.pdf':
        ...
        with (srcpath.parent / 'text1.txt').open('wt', encoding='utf-8') as file:
            ...
    Ответ написан
    2 комментария