Номер (теория чисел) около 14 А п скота офф практика матча

Ссылки: https://ac.nowcoder.com/acm/contest/82/A
Источник: Крупный рогатый скот-офф сети

Ограничение по времени: C / C ++ 1 секунда, 2 секунды Языки другие
пространственные ограничения: C / C ++ 262144K, другие языки 524288K
64 - битных ввода - вывода Формат: ДНУ%

Название Описание

раз т допроса, каждый раз, когда вы даете число п, найти [. 1 п,] в пределах максимального числа делителя числа подсчитывать о

Введите описание:

Первая строка положительного целого числа т 
после того, как т строк каждого положительное целое число п

Выход Описание:

Выходные т строк, каждая целое число, представляющее ответ
Пример 1

запись

копия
5 
13 
9 
1 
13 
16

экспорт

копия
6 
4 
1 
6 
6

Примечания:

К 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 ' ; 
        } 
    } 
}

 



рекомендация

отwww.cnblogs.com/qieqiemin/p/10958204.html
рекомендация