問題:
定義完美三元組,(a,b,d),a是d的倍數,b是d的倍數,且a>=b>=d>=1;
輸入:t組測試資料,第一行乙個t(1<=t<=10000),之後t行每行兩個整數l,r,表示三元組中a 的取值區間[l, r].
在此條件下,求滿足的完美三元組的總數 ( 1<=l<=r<=100000)。
輸出:乙個整數。
分析:首先,a的值已經確定,又d是a的約數,所以d的值可以確定,又b是d的倍數且b<=a,所以b的值可以確定。
假設 a = 12. 12 的 約數為(1,2,3,4,6,12).共6個,所以d的取值共6個。
每乙個d對應著1個或多個b的值。假設 d=1,那麼b = 1,2 ,3,4,····12共12種取值。。d=2時,b=2,4,6···12共6種取值。。
可以發現!!因為b最大等於a,最小等於d,且b是d的倍數,又 a是d的倍數,所以每個d對應的b的個數為 a/d!!
而a/b是a的約數!!!! 所以每乙個a的值能組成的完美三元數的個數=a的所有因數的和!!!!
如
:a
= 12 時 完美三元陣列的個數為 1+2+3+4+6+12=28 個。
注意:當兩個因數相同時,也就是a時平方數時,如3^2=9 只需要把3加一次,因為d=3的兩次情況時重複的。。
(l ,r 的取值範圍很大,如果迴圈列舉,一定會超時,所以打表很方便。)
#include #include #define n 100010
typedef long long ll; //typedef 作用是為一種資料型別定義乙個新名字 另外再專門研究 它的用法
ll dp[n]; // lang long 型別的陣列
void init()
}dp[i] += ans + dp[i - 1]; //dp[i]= 當前i所有約數的和加上之前所有的i所有約數的和(精髓!!!!!!)
} //如:l=2,r=4; dp[4](就是dp[r]) 已經是 a = 1--4 的所有完美三元陣列的個數了,但是
} //只需要 2--4 ,那麼減去 dp[1] (就是dp[l-1])就行了!!!
int main()
return 0;
}
HPUOJ 1443 完美三元組
時間限制 1 sec 記憶體限制 128 mb 提交 50 解決 3 統計第 屆acm亞洲區域賽henan賽區正在hpu舉行,這時作為hpuacm的萌新王小二要拉著女朋友到現場為學姐們加油!然而,入場竟然有個鑑定程式,判斷你是否接觸過acm,通過此問題你才有機會進場當觀眾。問題描述如下 定義完美三元...
等差三元組
題目 和是2組不同的等差三元組,除了等差的性質之外,還有個奇妙的地方在於 5 2 3 2 1 2 7 2 5 2 3 2 n 15。同這對三元組也存在同樣的性質 19 2 15 2 11 2 7 2 5 2 3 2 n 15。這種成對的三元組還有很多。當n 15時,有3對,分別是和,和,和。現給出乙...
遞增三元組
遞增三元組 描述給定三個整數陣列a a1,a2,an b b1,b2,bn c c1,c2,cn 請你統計有多少個三元組 i,j,k 滿足 1 i,j,k n ai bj ck 輸入第一行包含乙個整數n。第二行包含n個整數a1,a2,an。第三行包含n個整數b1,b2,bn。第四行包含n個整數c1,...