正题
题目大意
给出N,求所有的T使得
N−12TN−T\frac{N-\frac12T}{N-T}N−TN−21T
是正整数。
解题思路
我们定义x=N−Tx=N-Tx=N−T
那么T=N−x=N−(N−T)T=N-x=N-(N-T)T=N−x=N−(N−T)
原来的式子边为
N−12(N−x)x\frac{N-\frac12(N-x)}{x}xN−21(N−x)
N−12N−12xx\frac{N-\frac12N-\frac12x}{x}xN−21N−21x
N2x+12\frac N{2x}+\frac122xN+21
我们设这个为kkk,那么
2k=Nx+12k=\frac N{x}+12k=xN+1
因为kkk为正整数,所以:
- 2k2k2k为正整数
- Nxmod2=1\frac N{x}\ mod\ 2=1xN mod 2=1
code
#include<cstdio>
#include<algorithm>
using namespace std;
long long n,a[10000001],m;
int main()
{scanf("%lld",&n);//printf("%dMB\n",sizeof(a)/(1<<20));for(long long i=1;i*i<=n;i++)//枚举约数{if(!(n%i)){if((n/i-1)%2==0)//判断a[++m]=n-i;if(i!=(n/i))if((n/(n/i)-1)%2==0)//判断a[++m]=n-(n/i);}}sort(a+1,a+1+m);if(m-1==0) printf("%lld",m-1);//特判else printf("%lld ",m-1);//输出个数for(long long i=2;i<=m;i++){printf("%lld ",a[i]);}
}