1. 程式人生 > 實用技巧 >E-列舉求和(2020年廣東工業大學第十屆文遠知行杯新生程式設計競賽)

E-列舉求和(2020年廣東工業大學第十屆文遠知行杯新生程式設計競賽)


這道題是一個很簡單的列舉題:給定n,m,k求:

符號意義均為數學表達中的一般意義。

符號解釋:為防止讀不懂符號意義,做符號解釋:

gcd(i,j)表示i與j的最大公因數。

表示的是k為gcd(i,j)的因子;

[ ]表示當[ ]內的命題為真,則結果為1,若為假,則為0;例如[ 這道題是一個很簡單的列舉題 ]等於1

輸入描述:

第一行輸入一個t(1<=t<=100000);表示有t組輸入資料

接下來的t行,每行輸入n ,m,k;(1<=n,m,k<=1000000)

輸出描述:

對於每一行輸入資料,輸出一個數表示求和後的答案;

輸入

2
2 2 1
2 3 2

輸出

4
1

解析
其實挺簡單的,就是不知道啥叫因子。
一開始就真的信了題目的鬼話一個個列舉,結果tle了……
--假如整數n除以m,結果是無餘數的整數,那麼我們稱m就是n的因子。 需要注意的是,唯有被除數,除數,商皆為整數,餘數為零時,此關係才成立。反過來說,我們稱nm的倍數--
所以問題就變成了:有多少個i和j都是k的倍數。
所以直接輸出(n/k)*(m/k)就行了。
還要注意資料型別,1e6*1e6用long long.
#include<iostream>
using namespace std;
int main()
{
    int
t; scanf("%d",&t); while(t--) { long long n,m,k; scanf("%lld%lld%lld",&n,&m,&k); printf("%lld\n",(n/k)*(m/k)); } return 0; }