素因子去重
题解:这题主要是两步
1.找素因子——我这里用了快速查找一个数的素因子的方法
(①先找出在数中彻底去除2这个因子)
(②直接在奇数中寻找n的因子 i ,并彻底去除所有 i 的倍数的因子,这样就不用判断 i 是否为素数了,非常之妙!)
(③为了防止n是个大素数的情况出现,最后还要加一个判断)
2.去重——利用set容器
以下为完整代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
set<int>alpm;
long long n;
cin>>n;
while(n%2==0){ //先去除2这个因子
alpm.insert(2);
n/=2;
}
for(int i = 3;i<=sqrt(n);i+=2){ //这里是i+=2,因为已经去除偶数因子了
while(n%i==0){ //除去i的所有i的倍数的因子
alpm.insert(i);
n/=i;
}
}
if(n>2) alpm.insert(n); //防止n是个大素数的情况出现
int ans = 1;
for(set<int>::iterator it = alpm.begin();it!=alpm.end();it++){
ans=ans*(*it);
}
cout<<ans<<endl;
return 0;
}