https://codeforces.com/gym/100917/problem/C
题目大意:给定
n
n
n,找一个等比数列使其和等于
n
n
n(至少包括两项)。保证公比为整数,求满足条件的等比数列的个数。
思路:找到可以整除
n
n
n的数作为第一项,然后暴力枚举公比
q
q
q判断即可。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;
const int maxn=1e5+5;
int n,len;
int a[maxn];
int main()
{
scanf("%d",&n);
if(n==1)
{
printf("0\n");
return 0;
}
for(int i=1;i*2<=n;i++)
if(n%i==0)
a[len++]=i;
int cnt=len;
ll tmp1,tmp2;
for(int i=0;i<len;i++)
{
for(ll j=2;j<=n-1;j++)//枚举公比
{
tmp1=n*(j-1)/a[i]+1;
tmp2=1;
while(tmp2<tmp1)
tmp2*=j;
if(tmp2==tmp1)
++cnt;
}
}
printf("%d\n",cnt);
return 0;
}