約14 A N牛オフ練習試合の数(数論)

リンク:https://ac.nowcoder.com/acm/contest/82/A
出典:牛オフネットワーク

制限時間:C / C ++ 1秒、2秒言語は、他の
スペースの制限:C / C ++ 262144K、他の言語の524288Kの
64ビットIOフォーマット:LLD%

タイトル説明

トン呼び掛け回、あなたが番号を教えnは、見つけるたびに[を。1 nは、]について、カウント数の最大数の約数の中

説明を入力します。

正の整数tの最初の行
T列の各正の整数nの後

出力説明:

出力T線、各回答を表す整数
例1

エントリー

コピー
5 
13 
9 
1 
13 
16

輸出

コピー
6 
4 
1 
6 
6

備考:

データの100%に、T <= 500、1 < = N <= 1000000000000000000のアイデア:正の整数nは、私たちができる唯一の分解のn = P1 ^(X1)* P2 ^(×2)* P3(X3) ... * PK ^(XK)数N(X1 + 1)*(X2の除数である + 1)*(X3 + 1)* ... *(XK + 1) ここで、P1 <P2 <P3 < P4 ... <PK およびX1> X2> X3> X4> ...> XK 質量数の法則に従って数が大きくないの番号を見つけるために、ときに我々が最大数n個程度以上n以下の数を列挙することができます。注意すべきもう一つのポイントは、品質の少数の力ではない、ということですこれが最善ではないので、彼の素数より大きいの力が、ゼロではないが、ゼロです。私たちが欲しいのは、最適な最大数ではなく、小さな素数の大きな素数の力ならば除数の最大数、除数の数は、上記の式から分かるように、同じ時間数でほぼ同数、総素数を乗じ小さいほど、小さな値の値だけでなく、除数の数が多くなることができ、上述を証明することが可能です。なぜなら素数の力を満たすために逓減の法則の、素数のべき乗を定義するための上限と列挙型変数。詳細には、コードを参照してください。

















#include <iostreamの> 
する#include <cstdioを> 
する#include <CStringの> 
する#include <アルゴリズム> 
の#include <cmath> 
の#include <キュー> 
の#include <スタック> 
の#include <地図> 
の#include < セット > 
の#include <ベクトル> 
#include <iomanip>
 の#define ALL(X)(X).begin()、(X).END()
 の#defineを返すRT
 の#define DLL(X)のscanf( "%I64d"、およびX)
 の#define XLLを(X )のprintf( "%I64dの\ n"、X)
 の#define SZ(A)INT(。
サイズ()) の#defineすべて(A)a.begin()、a.end()
 の#define担当者(I、X、n)のための式(I = xをint型、iがN <; Iは++)
 の#define(; iが<= N; I = xをint型私は++)のためrepd(I、X、N)
 の#define PII対< int型、int型>
 の#define PLLペア<長い長い、長い長い>
 に#define gbtbイオス:: sync_with_stdio(偽)、cin.tie(0)、cout.tie(0)
 の#define MS0(X)のmemset((X) 、0、はsizeof((X)))
 の#define MSC0(X)のmemset((X)、 '\ 0'はsizeof((X)))
 の#define PB一back
 の#define融点make_pair
 の#define Fiの第一
 の#define SE第二
 #define EPS 1E-6
 の#define GG(X)のgetInt(&X)
 の#define DB(X)COUT << "== [ "<< X <<"] ==" << ENDL。
使用して 名前空間をSTD; 
typedefの長い 長いLL。
LLのGCD(-1,11,11- b)は{ 戻り B GCD(B、%の?B);} 
LLのLCM(-1,11,11- b)は{ 返す / GCD(a、b)は* ; Bは} 
LL powmod {LL ANS(MOD -1,11,11-のB、LL) = 1一方、(b)は、{ もし、(B%2)ANS = ANS *%MOD; = *%MOD; B / A = 2 ;} 戻りANS;} 
インラインボイドのgetInt(int型 *のP)。
const  int型 MAXN = 1000010 ;
const  int型 INF = 0x3f3f3f3f / ***テンプレートコード* *ここから始まる** * / 
int型 NOPRIME [MAXN + 5 ]。
std ::ベクトル < 整数 > のp;
ボイドgetprime()
{ 
    int型、M = SQRT(MAXN + 0.5 )。
    以下のためにint型 I = 2 ; I <= M; iは++ 
    { 
        ためint型 J = i *がI、J <= MAXN; J + = I)
        { 
            NOPRIME [J] = 1 
        } 
    } 
    repd(I、2 、MAXN)
    { 
        場合(!NOPRIME [i])と
        { 
            p.push_back(I)。
        } 
    } 
} 
LL [ 500 ] = { 23571113171923293137414347 }。
LL ANS = 0LL。
LLのn; 
ボイド DFS(LLのX、int型の ID、int型の制限、LLのNUM)
{ 
    ANS = MAX(ANS、NUM)。
    もし(ID> = 15 
    { 
        リターン
    } 
    のLL TEMP = [ID]。
    INT J = 1 J ++; J <=限界
    { 
        場合(X <= N / TEMP)
        { 
            DFS(図示X *の温度、ID + 1、J、NUM *(J + 1 ))。
            TEMP * = [ID]。
        } 
        { 
            破ります
        } 
    } 

} 
int型)(主
{ 
    //freopenは( "D:\\ common_text \\ code_stream \\ in.txt"、 "R"、STDIN)。
    // freopenは( "D:\\ common_text \\ code_stream \\ out.txtを"、 "W"、STDOUT)。
    
    int型のトン。
    gbtb; 
    // coutの<<(1LL << 60)<<てendl;
    // coutの<<(LL)1E18 <<てendl; 
    cinを>> トン。
    一方、(t-- 
    { 
        CIN >> N。
        ANS = 0LL。
        DFS(1LL、060 、1LL)。
        coutの << ANS << てendl; 
    } 
    
    
    戻り 0 
* P){
     チャーCH。
    実行{ 
        CH = GETCHAR()。
    } 一方、(CH == '  ' || CH == ' \ n ' );
    もし(CH == ' - ' ){
         * P = - (GETCHAR() - ' 0 ' )。
        一方、((CH = GETCHAR())> = ' 0 ' && CH <= ' 9 ' ){
             * p = * P * 10 - CH + ' 0 ' 
    } 
    {
         * P = CH - ' 0 ' 一方、((CH = GETCHAR())> = ' 0 ' && CH <= ' 9 ' ){
             * p = * P * 10 + CH - ' 0 ' 
        } 
    } 
}

 



おすすめ

転載: www.cnblogs.com/qieqiemin/p/10958204.html