UVA-10791((+素因数分解思考法)

トピックへのリンク:https://cn.vjudge.net/problem/UVA-10791

タイトル効果:入力の整数nは、少なくとも2つの正の整数を見つけるようなそれらの少なくとも共通のnの倍数、及びこれらの整数と最小値、及び最小出力ています。

問題の意味の分析:我々は素因数分解に法律を使用し、そのような彼らの最小公倍数nは、少なくとも2つの正の整数を探します。N = P1 ^ T1 + P2 ^ T2 + .. PR ^ TR

我々が発見した場合の因子の最大数、およびこれらの要因の最小和(例:12 = 3 * 4 12> 4 + 3)

だから我々は、ちょうどこれらの素数の合計ができ、n個を打破する必要があります

1の#include <iostreamの>
 2の#include <アルゴリズム>
 3の#include <cmath>
 4  使って 名前空間STD。
5  長い 長い(解決int型n)を
 6  {
 7つの     長い 長い ANS = 0 8      INT T = 0 9      INT H = SQRT(N + 1 )。
10      のint TEMP = 1 11      のためにint型 I = 2 ; iが= hを<Iは++ 12      {
 13         IF(N-I%== 0 14          {
 15          T ++、TEMP = 1 ;
 16          ながら(N-I%== 0 17          {
 18である              N- / = I;
 19。              TEMP * = I; // 注:ANS + =私;これは温度と同様に、2 * 3 * = iは、2 ^ 3である
20          }
 21は          ANS + = TEMP;
 22である         }
 23である     }
 24      IF(N> 1// SQRTよりも大きいあり(n)は素因数
25の      ANS + N- =、T ++ ;
 26は、     IF ==(T1// Tは、素因数の数、請求項2の質問の数は、少なくとも表し
27      ANS + =を1。;
 28      リターンANS;
 29  }
 30  のint main()の
 31である {
 32  //     freopenは(「D:\\ in.txt "" R&LT "STDIN);
 33である //   freopenは(" D:「;、STDOUT)\\ out.txtを"" W 
34である     INT N-、T = 1 ;
 35      ながら(〜scanfの(" %のD "、 &N-))
 36      {
 37 [          IF N( - == 0 38である         BREAK ;
 39         もし(N == 1 40          のprintf(" ケース%D:2 \ n "、T ++ )。
41           他の
42          のprintf(" ケースは%d:%LLDの\ nを"、T ++ 、)N(解決)。
43      }    
 44  //      FCLOSE(STDIN)。
45  // FCLOSE(STDOUT)。
46 }
コードの表示

注意事項:

1.なお、N = 1、2は、境界をテストする場合は、この必要性を考えて、答えです

2.両者の差の間の差が、乗数効果を再生するためにプラスである(8アナログを取ることができ、被検者の要件を満たしていません)

1  IF(N-I%== 0 2  {
 3。 T ++、TEMP = 1 ;
 4。 一方、(N-I%== 0 5。 {
 6。      N- / = I;
 7。      TEMP * = I; // 注:ANS + = I 2 * 3、これは温度と同様であり、* = I、3 ^ 2である
8。 }
 9つの。 ANS + = TEMP;
 10   }
1  IF(N-I%== 0 2  {
 3。 T ++、TEMP = 1 ;
 4。 一方、(N-I%== 0 5。 {
 6。      N- / = I;
 7つの。      ANS + = I; // 注:ANS + =私; * 3 2 * = iは、3 ^ 2であり、温度と同様に、これは、である
。8  }
 9    }
コードの表示
書式#include <iostreamの> 
の#include <アルゴリズム> 
書式#include <cmath>
 使用して 名前空間はstdを、
長い 長い(解決int型N)
{ 
    長い のANS = 0 int型、T = 0 ;
    int型 H = SQRT(nは+ 1 )。
    int型の温度= 1 ;
    以下のためにint型 I = 2 ; iが= hを<I ++の
    { 
        場合(N%I == 0 
        { 
        T ++、TEMP = 1;
         一方、(N-1%の== 0 
        { 
            N- / = I; 
            TEMP * = I; 
        } 
        ANS + = TEMP; 
        } 
    } 
    IF(N> 1。 || T == 0// SQRT(N)のより大きいあります素因数 
    ANS = N +、T ++ ;
     IF(T == 1// Tは、素因数の数、少なくとも2必要な質問の数を表し 
    ANS = +を1。;
     戻りANSを; 
} 
int型(メイン)
{ 
//    freopenは( "D:\\ in.txt"、 "R"、STDIN)。
//     freopenは( "D:\\ out.txtを"、 "W"、STDOUT)。
    int型、T =、nは1 ;
    一方、(〜のscanf(" %d個"、&N))
    { 
        場合(N == 0 ブレーク
        裁判所未満 << " ケース" <<トン++ << " " <<(n)を解く<< てendl; 
    }     
//    FCLOSE(STDIN)。
// fcloseを(標準出力)。
}
ACコード

 

おすすめ

転載: www.cnblogs.com/Aiahtwo/p/10939458.html