E-列舉求和(2020年廣東工業大學第十屆文遠知行杯新生程式設計競賽)
阿新 • • 發佈:2020-12-06
這道題是一個很簡單的列舉題:給定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的因子。 需要注意的是,唯有被除數,除數,商皆為整數,餘數為零時,此關係才成立。反過來說,我們稱n為m的倍數--
所以問題就變成了:有多少個i和j都是k的倍數。
所以直接輸出(n/k)*(m/k)就行了。
還要注意資料型別,1e6*1e6用long long.
#include<iostream> using namespace std; int main() { intt; 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; }