注意到每次回到1手中的k只能是n的因数,暴力枚举n的因数计算贡献
代码极丑
#include<bits/stdc++.h>
using namespace std;
vector<long long> a;
long long b[100010];
int p=1;
int main(){
long long n;
while(~scanf("%lld",&n)){
a.clear();
for(long long i=1;i<=(int)sqrt((double)n);i++){
if(n%i==0){
a.push_back(i);
a.push_back(n/i);
}
}
p=1;
for(int i=0;i<a.size();i++){
b[p++]=(1+n-a[i]+1)*n/a[i]/2;
}
sort(b+1,b+p);
printf("%lld",b[1]);
for(int i=2;i<p;i++){
if(b[i]==b[i-1])
continue;
printf(" %lld",b[i]);
}
printf("\n");
}
return 0;
}
Lock problem
close