2022青岛市小学组第三题
原题:






代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,ans=0,t;
int main(){
freopen("turn.in","r",stdin);
freopen("turn.out","w",stdout);
cin>>n;t=sqrt(n);
if(n==2)cout<<0;
else if(t*t!=n)cout<<-1;
else{
ans=n-2+1;
while(t!=2){
ll tmp=(t-1)*(t-1);
ans+=tmp-t+1;
t--;
}
cout<<ans;
}
return 0;
}
解题思路:
分三种情况,第一种,n=2,直接输出0
第二种,sqrt(n)2≠n,直接输出-1
第三种,sqrt(n)2=n,这个数会每次先遍历到n,从n开方,遍历到(sqrt(n)-1)2 ,从(sqrt(n)-1)2开方,重复执行这种操作,直至开方结果等于2,累计次数即为答案