题目链接
塔子哥的平方数-阿里淘天2024笔试(codefun2000)
题目内容
塔子哥拿到一个整数 x,并希望通过如下两个操作将x变为完全平方数。
- 1、如x是素数,则将其减1
- 2、否则,将其除以自己最小的素因子。
塔子哥需要操作多少次?
输入描述
一个正整数x
1 ≤ x ≤ 1 0 9 1≤x≤10^9 1≤x≤109
输出描述
一个整数,表示操作次数。
样例1
输入
5
输出
1
样例2
输入
20
输出
3
题解1
#include<bits/stdc++.h>
using namespace std;
int n, ans;
unordered_map<int,bool> hmap;
bool judge(int x){ // 判断x是否是素数
for(int i = 2; i <= x/i; i++){
if(x%i == 0) return false;
}
return true;
}
int getPrime(int x){ // 获取x的最小质因子
int t = int(sqrt(x));
for(int i = 2; i <= t; i++){
if(x%i == 0) return i;
}
}
bool check(int x){ // 判断x是否是完全平方数
int t = int(sqrt(x));
return t * t == x;
}
int main(){
scanf("%d", &n);
while(!check(n)){
ans++;
if(judge(n)) n--;
else n /= getPrime(n);
}
printf("%d\n", ans);
return 0;
}