终于有一道自己不耗时很长时间自己独立思考做出来的题目了
虽然代码模板是y总的,但是也是很开心哒
y总代码:
#include<iostream>
using namespace std;
typedef long long ll ;
int main(){
int n;
cin>>n;
while(n--){
ll x;
cin>>x;
ll res=1;
for(int i=2;i<=x/i;i++){
if(x%i==0)
{
res*=i;
while(x%i==0){
x=x/i;
}
}
}
if (x>1){
res*=x;
}
cout<<res<<endl;
}
return 0;
}
y总的代码非常的简便,就是根据公式,详情可见约数的个数的模板题目
我的代码是根据题意严格来的并不简便,运算耗时多,没再次温故约数
前,不怎么理解y的公式,现在比上一次理解多点了
自己的代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
vector<ll> yueshu(ll x){
vector<ll> r;
for(int i=1;i<=x/i;i++){
if(x%i==0){
r.push_back(i);
if(i!=x/i){
r.push_back(x/i);
}
}
}
sort(r.begin(),r.end()); //进行排序
reverse(r.begin(),r.end());//实现大的约数在前边
return r;
}
bool pan(ll t){
for(int i=2;i<=t/i;i++){
int c=0;
if(t%i==0){
while(t%i==0){
t=t/i;
c++;
if(c>=2){
return false;
}
}
}
}
return true;
}
int main(){
int n;
cin>>n;
while(n--){
vector<ll>r;
ll x;
cin>>x;
r=yueshu(x);
int max=0;
for(auto t:r){
if(pan(t)){
cout<<t<<endl;
break;
}
}
}
return 0;
}