Description
话说, 小X是个数学大佬,他喜欢做数学题。
有一天,小X想考一考小Y。他问了小Y一道数学题。题目如下: 对于一个正整数N,存在一个正整数T(0<T<N),
使得的值是正整数。
小X给出N,让小Y给出所有可能的T。如果小Y不回答这个神奇的大佬的简单数学题,他学神的形象就会支离破碎。所以小Y求你帮他回答小X的问题。
Input
一个整数N。
Output
第一个数M,表示对于正整数N,存在M个不同的正整数T,
使得是整数。
后面是M个数,每一个数代表可能的正整数T(按从小到大的顺序排列)。
Solutions
设这个式子=K,得T=(2K-2)/(2K-1)*N,
然后只需枚举N的因数,判断2K-1等于因数时,是否为整数。
是,算出T,统计答案即可。
代码
1 var 2 n,m:int64; 3 a:array [0..100001] of int64; 4 procedure qsort(l,r:longint); 5 var 6 i,j:longint; 7 mid,t:int64; 8 begin 9 if l>r then exit;10 i:=l; j:=r;11 mid:=a[(l+r) div 2];12 repeat13 while a[i]mid do dec(j);15 if i<=j then16 begin17 t:=a[i]; a[i]:=a[j]; a[j]:=t;18 inc(i); dec(j);19 end;20 until i>j;21 qsort(i,r);22 qsort(l,j);23 end;24 25 procedure main;26 var27 i:longint;28 k,t:int64;29 begin30 m:=0;31 for i:=1 to trunc(sqrt(n)) do32 if n mod i=0 then33 begin34 if (i+1) mod 2=0 then35 begin36 k:=(i+1) div 2;37 t:=(k+k-2)*(n div i);38 if (t>0) and (t 0) and (t a[i+1] then68 write(' ',a[i]);69 end;70 71 begin72 assign(input,'math.in');73 assign(output,'math.out');74 reset(input);75 rewrite(output);76 readln(n);77 main;78 qsort(1,m);79 print;80 close(input);81 close(output);82 end.