题意描述
对2以上(包括2)n以下(包括n)的正整数x可以进行以下操作。
如果x+1≤n,x+1可变为新的x
如果x为整数,✓x可变为新的x
例如x=2时,新的x可以为3。x=4时,新的x可以为(2,5)中的任意一个。
kagamiz想知道从x=2开始,将所有允许的操作都执行至少一遍,使x的值再次为2的方法中,操作次数最少的方法的操作次数。
你的任务就是判断这样的方法是否存在,如果存在,则输出最小操作次数。输入格式
输入1行,1个整数n。输出格式
输出1行最小操作次数。当不存在符合条件的方法时输出—1。
输入样例 1 输出样例 1
9 10
重点!!!AC代码来了(如有不明白,请发私信)
/*======================洛谷U236389&2022青岛市程序设计竞赛T3========================*/
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long n;
cin>>n;
long long t=sqrt(n);
if (n==2)cout<<0;
else if (t*t!=n)cout<<-1;
else
{
long long a=n-2+1;
while(t!=2)
{
long long yyds=(t-1)*(t-1);
a+=yyds-t+1;
t--;
}
cout<<a<<endl;
}
return 0;
}