一、问题描述
二、问题分析
这道题是一道数论编程题,首先要知道质因子,才可以做这道题。虽然暴力可以解,但会超时。暴力也应该能拿部分分数。这里讲解一下知道质因子之后,要怎么解决问题。
x
x
x初始化为1,将
n
n
n分解成
n
n
n
=
=
=
p
1
a
1
p^{a_1}_ {1}
p1a1
×
×
×
p
2
a
2
p^{a_2}_ {2}
p2a2
×
⋅
⋅
⋅
×
×···×
×⋅⋅⋅×
p
i
a
i
p^{a_i}_ {i}
piai
⋅
⋅
⋅
×
···×
⋅⋅⋅×
p
r
a
r
p^{a_r}_ {r}
prar,若
a
i
a_i
ai为奇数,那
x
x
x就乘一个
p
i
p_i
pi。
三、代码实现
// 编程软件:Dev-C++ 5.4.0
#include<iostream>
using namespace std;
typedef long long ll;
int main(){
ll n;
cin >> n;
ll x = 1; // 最小正整数,初始化为1
for(int p=2; p*p<=n; p++){
if(n%p==0){
int a=0; // 记录一个质因子的指数
while(n%p==0){
n /= p;
a++;
}
if(a%2==1) x *= p; // 质因子指数为奇数,那x乘上一个质因子
}
}
if(n>1) x *= n; // 最后还有一个指数为1的质因子,那就再乘上一个质因子
cout << x;
return 0;
}