初始时在记事本上只有一个字符 'A'。你可以在此记事本上每一步可以进行两种操作:
Copy All:
你可以复制记事本上所有的字符(不允许部分复制)Paste:
你可以粘贴上一次复制的字符。
给出一个数字 n
。你需要在记事本上得到恰好 n
个 'A', 请问最少需要几步。
样例
例1:
输入: 3
输出: 3
解释:
Intitally, we have one character 'A'.
In step 1, we use Copy All operation.
In step 2, we use Paste operation to get 'AA'.
In step 3, we use Paste operation to get 'AAA'.
例2:
输入: 1
输出: 0
注意事项
n
在范围 [1, 1000]
内
输入测试数据 (每行一个参数)如何理解测试数据?
class Solution {
public:
/**
* @param n: The number of 'A'
* @return: the minimum number of steps to get n 'A'
*/
int minSteps(int n) {
// Write your code here
return count(n);
}
int count(int n)
{
if(n == 0)
return 0;
else if(n == 2)
return 2;
else if(n == 3)
return 3;
if(n % 2 == 0)
{
return count(n/2) + 2;
}
if(isPrime(n))
return n;
int big = yinzi(n);
int times = n / big;
return count(big) + 1 + times - 1;
}
int yinzi(int num)
{
for(int i = num - 1; i >= 2; i--)
{
if(num % i == 0)
return i;
}
return -1;
}
bool isPrime(int number) {
for (int i = 2; i * i <= number; i++)
if (number % i == 0)
return false;
return true;
}
};