A. Divide it!
•题意
定义整数 n 上的三个操作:
如果可以经过上述操作使得 n 变为 1,输出最小操作次数,反之,输出-1;
•题解
易得 2 > 3/2 > 5/4;
操作执行的优先级 1 > 2 > 3;
按照优先级依次执行;
•AC代码
View Code1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 5 ll n; 6 int Solve() 7 { 8 int ans=0; 9 while(n%2 == 0) 10 { 11 n /= 2; 12 ans++; 13 } 14 while(n%3 == 0) 15 { 16 n /= 3; 17 ans += 2; 18 } 19 while(n%5 == 0) 20 { 21 n /= 5; 22 ans += 3; 23 } 24 return n == 1 ? ans:-1; 25 } 26 int main() 27 { 28 int test; 29 scanf("%d",&test); 30 while(test--) 31 { 32 scanf("%lld",&n); 33 printf("%d\n",Solve()); 34 } 35 return 0; 36 }