版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SSL_hzb/article/details/82811800
题意
给出 ,求出每一个 。
思路
设
为
有
然后我们可以转一下公式:
设
为一个正整数,根据题意可得
有
因为
是正整数,所以
为偶数,所以
综上所述,我们枚举一下
的约数
,根据上面的性质统计答案。
代码
#include<cstdio>
#include<algorithm>
using namespace std;
long long N, cnt;
long long a[4001];
int main() {
scanf("%lld", &N);
for (long long i = 1; i * i < N; i++) {
long long x = i;
if (N % x) continue;
if ((N / x) % 2) a[++cnt] = N - x;
if (i == 1) continue;
x = N / i;
if ((N / x) % 2) a[++cnt] = N - x;
}
sort(a + 1, a + cnt + 1);
printf("%d", cnt);
for (int i = 1; i <= cnt; i++)
printf(" %lld", a[i]);
}