做網(wǎng)站優(yōu)化有用嗎百度廣告公司聯(lián)系方式
文章目錄
- 回顧
- 思路
- c 語言代碼
回顧
- A+B III
- 問題 H: 三角數(shù)
- 問題 G: 3個數(shù)
- 等式 數(shù)組下標(biāo)查詢,降低時間復(fù)雜度
- 1405 問題 E: 世界杯
- xtu 數(shù)碼串
- xtu oj 神經(jīng)網(wǎng)絡(luò)
- xtu oj 1167 逆序數(shù)(大數(shù)據(jù))
- xtu oj 原根
思路
首先直觀地理解這個題目的意思,用 a=6
這個樣例去思考,我湊了一下,發(fā)現(xiàn)直觀地算找出這四個答案組數(shù)不是那么好找。分別是 x=2,y=3
,x=3,y=6
,x=4,y=12
,x=5,y=30
,我就在想計算機需要循環(huán)去思考,從小到大去循環(huán),那么我們再觀察給的表達(dá)式,x
一定要小于 a
,這樣才能使得 x
的倒數(shù)比 a
的倒數(shù)大,才能找到正整數(shù)解,同理 y
一定要比 x
大,分子相同分母越大,分?jǐn)?shù)越小。
所以我們可以發(fā)現(xiàn) x
的取值是有一個范圍的,從 1
到 a-1
,不能取到 a
,假設(shè)取到 a
,此時減去 0
才是 1/a
,但是 1/y
顯然不能取 0
,以這個作為出發(fā)點,把 x
和 a
都當(dāng)作參數(shù),算出 y
的表達(dá)式,y=(a*x)/(a-x)
,需要滿足的條件是正整數(shù),并且 y>x
需要注意的代碼細(xì)節(jié)是需要使用 long long
,我其實最開始注意了,可能漏了一些變量,直接 WA
了,后面把 a
和 x
也改成 long long
才過掉這題。
c 語言代碼
#include<stdio.h>
#define LL long long int main(){int t;scanf("%d",&t);while(t--){LL a;scanf("%lld",&a);int ans=0;for(LL x=1;x<=a-1;x++){LL up=a*x;LL down=a-x;if(up%down==0){LL temp=up/down;if(temp>x){ans++;}}}printf("%d\n",ans);}return 0;
}