1. 程式人生 > 實用技巧 >Codeforces Round #685 (Div. 2) Problem - A. Subtract or Divide 題解

Codeforces Round #685 (Div. 2) Problem - A. Subtract or Divide 題解

題目

題目連結

Codeforces Round #685 (Div. 2) Problem - A. Subtract or Divide

題目大意

給你一個整數n,你可以進行以下操作:

  • 將n除以一個能整除的數。
  • 將n減去1(如果n大於1)

求數量最小的運算元使得n變成1。

輸入

第一行包含測試情況數量t(1<=t<=1000)。

每個測試情況只包含一個整數n(1<=n<=1e9)。

輸出

對於每個輸出情況,輸出使得n變為1的最小運算元量。

樣例輸入

6
1
2
3
4
6
9

樣例輸出

0
1
2
2
2
3

題解

  • 如果n=1,結果為0
  • 如果n=2,2->1,結果為1
  • 如果n=3,3->2->1,結果為2
  • 如果n>3且n為偶數,n->2->1,結果為2
  • 如果n>3且n為奇數,n->n-1->2->1,結果為3

Then show the code.

// A. Subtract or Divide
#include <stdio.h>

long long n;
int main(){
    int t, cnt;
    scanf("%d", &t);
    while(t--){
        scanf("%I64d", &n);
        cnt = 0;
        if(n==2)
            cnt = 1;
        else if(n == 3)
            cnt = 2;
        else if(n%2 == 0 && n>3)
            cnt = 2;
        else if(n%2 && n>3)
            cnt = 3;
        printf("%d\n", cnt);
    }
}