nssl1157-简单数学题【约数,换元法】
生活随笔
收集整理的這篇文章主要介紹了
nssl1157-简单数学题【约数,换元法】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
正題
題目大意
給出N,求所有的T使得
N?12TN?T\frac{N-\frac12T}{N-T}N?TN?21?T?
是正整數(shù)。
解題思路
我們定義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?21?N?21?x?
N2x+12\frac N{2x}+\frac122xN?+21?
我們設(shè)這個為kkk,那么
2k=Nx+12k=\frac N{x}+12k=xN?+1
因為kkk為正整數(shù),所以:
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++)//枚舉約數(shù){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);//輸出個數(shù)for(long long i=2;i<=m;i++){printf("%lld ",a[i]);} } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的nssl1157-简单数学题【约数,换元法】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 败家之眼拉着腾讯出了台游戏手机败家之眼拉
- 下一篇: ssl提高组周六模拟赛【2018.9.2