5 条题解
-
1
gscsd LV 7 @ 8 年前
#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LF double
#define LL long long
#define min(a,b) ((a<b)?a:b)
#define max(a,b) ((a>b)?a:b)
#define fo(i,j,k) for(int i=j;i<=k;i++)
#define fd(i,j,k) for(int i=j;i>=k;i--)
using namespace std;
int const MxCnt=1e4;
LL Ans,Cnt,Pri[MxCnt+10];
bool CPri(LL N){
int Mx=sqrt(N);
fo(i,2,Mx)if(N%i==0)return 0;
return 1;
}
void Prep(LL N){
Cnt=0;int Mx=sqrt(N);
fo(i,1,Mx)if(N%i==0){
if(CPri(i+1))Pri[++Cnt]=i+1;
if(CPri(N/i+1))Pri[++Cnt]=N/i+1;
}
}
bool Cmp(LL X,LL Y){return X>Y;}
void Dfs(int Pos,LL Y,LL X){
if(Y==1)Ans=min(Ans,X);
if((Pos>Cnt)||(Y==1)||(X>Ans))return;
for(LL i=Pri[Pos]-1;Y%i==0;i*=Pri[Pos])Dfs(Pos+1,Y/i,X/(Pri[Pos]-1)*Pri[Pos]);
Dfs(Pos+1,Y,X);
}
int main(){
//freopen("d.in","r",stdin);
//freopen("d.out","w",stdout);
int T;scanf("%d",&T);
fo(cas,1,T){
LL Y;scanf("%lld",&Y);
Prep(Y);
sort(Pri+1,Pri+Cnt+1,Cmp);
Ans=(Y==1)?Y:Y*10;Dfs(1,Y,Y);
printf("%lld\n",Ans);
}
return 0;
} -
05 年前@
-
08 年前@
打表的好题
-
09 年前@
这个我也来
-
-29 年前@
虽然我没有AC但我来抢个沙发
- 1
信息
- ID
- 1862
- 难度
- 7
- 分类
- (无)
- 标签
- 递交数
- 165
- 已通过
- 26
- 通过率
- 16%
- 被复制
- 2
- 上传者