Ссылки: https://ac.nowcoder.com/acm/contest/82/A
Источник: Крупный рогатый скот-офф сети
Ограничение по времени: C / C ++ 1 секунда, 2 секунды Языки другие
пространственные ограничения: C / C ++ 262144K, другие языки 524288K
64 - битных ввода - вывода Формат: ДНУ%
пространственные ограничения: C / C ++ 262144K, другие языки 524288K
64 - битных ввода - вывода Формат: ДНУ%
Название Описание
раз т допроса, каждый раз, когда вы даете число п, найти [. 1 п,] в пределах максимального числа делителя числа подсчитывать о
Введите описание:
Первая строка положительного целого числа т
после того, как т строк каждого положительное целое число п
Выход Описание:
Выходные т строк, каждая целое число, представляющее ответ
Примечания:
К 100% данных, т <= 500, 1 < = N <= 1000000000000000000 идеи: положительное целое число п, мы можем быть только разложение п = р1 ^ (х1) * р2 ^ (х2) * р3 (х3) ... * рк ^ (Xk) число п является делителем (x1 + 1) * (x2 + 1) * (х3 + 1) * ... * (Xk + 1) , где p1 <p2 <p3 < p4 ... <рк и x1> x2> x3> x4> ...> хк , то мы можем перечислить число п или меньше , когда число в соответствии с законом массового числа , чтобы найти число не больше , чем о максимальном числа п , Следует также отметить, что, не сила небольшого числа качества равна нулю, в то время как сила больше , чем его простое число не равно нулю, потому что это не самое лучшее. То , что мы хотим , не является оптимальным максимальным количество, но максимальное число делителя, число делителя может быть видно из приведенных выше формул, если сила больших простых чисел на малые простые числа, примерно такое же количество в то же время числа, общая стоимость меньшего, более малой величины , умноженной на простое число, но и позволяет количество делителя становится большим, можно доказать , указанное выше. Перечисление переменной с максимальным пределом для определения степени простого числа, в силу закона убывающей встретить силу простого числа. , Подробности см код:
#include <iostream> #include <cstdio> #include <CString> #include <Алгоритм> #include <CMATH> #include <очереди> #include <стек> #include <карта> #include < набор > #include <вектор> # include <iomanip> #define ВСЕ (х) (х) .begin (), (х) .end () #define Rt вернуть #define DLL (х) зсапЕ ( "% I64d", & х) #define XLL (х ) Е ( "% I64d \ п", х) #define SZ (а) Int (а. размер ()) #define все (а) a.begin (), a.end () #defineRep (я, х, п) для (INT I = х; <п; я ++) #define repd (я, х, п) для (INT I = х; г <= п; я ++) #define PII пару < INT, INT> #define ФАПЧ пара <долго долго, долго долго> #define gbtb ИОС :: sync_with_stdio (ложь), cin.tie (0), cout.tie (0) #define ms0 (X) MemSet ((X) , 0, SizeOf ((Х))) #define MSC0 (Х) MemSet ((Х), '\ 0', SizeOf ((Х))) #define пб push_back #define т.пл. make_pair #define фи первый #define себе второй #define EPS 1e-6 #define гг (х) GetInt (& х) #define дБ (х) соиЬ << "== [ "<< х <<"] ==" << ENDL; используя пространство именстанд; ЬурейеЕ долго долго LL; LL НОД (LL а, Л.Л. б) { возвращение Ь НОД (Ь, а%? б): а;} LL LCM (LL а, Л.Л. б) { вернуть а / НОД (а, б) * б;} LL powmod (LL а, б LL, LL MOD) {LL ANS = 1 ; в то время как (б) { если (б% 2 ) = ANS ANS * а% MOD; а = а * а% MOD, б / = 2 ;} возвращение ANS;} инлайн недействительного GetInt ( INT * р); Const INT maxn = 1000010 ; Const ИНТ инф = 0x3f3f3f3f ; / *** ШАБЛОН CODE * * НАЧИНАЕТСЯ ЗДЕСЬ ** * / INT noprime [maxn + 5 ]; станд :: вектор < INT > р; недействительный getprime () { INT т = SQRT (maxn + 0,5 ); для ( INT I = 2 ; я <= т; я ++ ) { для ( Int J = I * я, J <= maxn; J + = я) { noprime [J] = 1 ; } } Repd (я, 2 , maxn) { если (! Noprime [I]) { P.push_back (я); } } } LL а [ 500 ] = { 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 , 47 }; LL ANS = 0ll; LL н; пустот в глубину (LL х, INT ID, INT предел, LL Num) { ANS = макс (ANS, Num); если (идентификатор> = 15 ) { возвращение ; } LL Темп = а [ID]; для ( INT J = 1 , J <= предел; j ++ ) { если (х <= п / Temp) { ДФС (х * Температура, ID + 1 , J, Num * (J + 1 )); темп * = а [ID]; } Еще { перерыв ; } } } Int основных () { //freopen ( "D: \\ common_text \\ code_stream \\ in.txt", "г", STDIN); // freopen ( "D: \\ common_text \\ code_stream \\ out.txt", "ш", стандартный вывод); ИНТ т; gbtb; // соиЬ << (1LL << 60) << епсИ; // соиЬ << (LL) 1e18 << епсИ; CIN >> т; в то время как (T-- ) { CIN >> п; ANS = 0ll; ДФС (1LL, 0 , 60 , 1LL); соиЬ << анс << епсИ; } Возвращает 0 ; * Р) { символ ч; делать { ч = GetChar (); } В то время (ч == ' ' || ч == ' \ п ' ); если (ч == ' - ' ) { * р = - (GetChar () - ' 0 ' ); в то время как ((CH = GetChar ())> = ' 0 ' && ч <= ' 9 ' ) { * р = * р * 10 - CH + ' 0 ' ; } Еще { * р = ч - ' 0 ' ; в то время как ((CH = GetChar ())> = ' 0 ' && ч <= ' 9 ' ) { * р = * р * 10 + ч - ' 0 ' ; } } }