一道有意思的題目
只有兩個(gè)鍵的鍵盤
這題目自己思考了一下,還真的挺有意思的。首先壁晒,得知道如果輸入的數(shù)n是一個(gè)素?cái)?shù)骂际,那么就必須得用n次操作才能完成疗琉,因?yàn)樗財(cái)?shù)不能拆成任何數(shù)的乘積,所以只能一個(gè)一個(gè)復(fù)制粘貼歉铝。然后考慮的是合數(shù)盈简,如果合數(shù)能拆成多個(gè)素?cái)?shù)的乘積,那就是先復(fù)制粘貼一個(gè)素?cái)?shù)太示,再對素?cái)?shù)進(jìn)行復(fù)制粘貼柠贤,就能得到合數(shù)了。所以类缤,這道題目就變成了輸入的n拆成素?cái)?shù)乘積的形式臼勉,而操作的次數(shù)正好是拆成的素?cái)?shù)的和。
代碼如下:
public int minSteps(int n) {
/**
*
* 功能描述: 最初在一個(gè)記事本上只有一個(gè)字符 'A'餐弱。你每次可以對這個(gè)記事本進(jìn)行兩種操作:
*
* Copy All (復(fù)制全部) : 你可以復(fù)制這個(gè)記事本中的所有字符(部分的復(fù)制是不允許的)宴霸。
* Paste (粘貼) : 你可以粘貼你上一次復(fù)制的字符囱晴。
* 給定一個(gè)數(shù)字 n 。你需要使用最少的操作次數(shù)瓢谢,在記事本中打印出恰好 n 個(gè) 'A'畸写。輸出能夠打印出 n 個(gè) 'A' 的最少操作次數(shù)。
*
*
* @param: [n]
* @return: int
* @auther: smallfish
* @date: 2020-03-22 19:53
*/
int result = 0;
int start = 2;
while (start > 0) {
while (n % start == 0) {
n = n / start;
result += start;
}
start += 1;
if(n==1){
break;
}
}
return result;
}