NC18354. 无序组数
描述
输入描述
第一行数据组数 T(1≤T≤10000)
接下来T行,每行两个正整数 A,B(1≤A,B≤10000)
输出描述
共T行,每行一个结果
示例1
输入:
1 4 6
输出:
11
说明:
样例解释:C++14(g++5.4) 解法, 执行用时: 13ms, 内存消耗: 804K, 提交时间: 2018-09-07 16:35:28
#include<bits/stdc++.h> using namespace std; int d[100010]; int T; int main(){ for(int i=1;i<100010;i++) for(int j=i;j<100010;j+=i) d[j]++; scanf("%d",&T); for(;T--;){ int a,b; scanf("%d%d",&a,&b); printf("%d\n",d[a]*d[b]-d[__gcd(a,b)]*(d[__gcd(a,b)]-1)/2); } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 12ms, 内存消耗: 996K, 提交时间: 2018-09-07 16:01:46
#include<bits/stdc++.h> using namespace std; int d[100010]; int T; int main(){ for(int i=1;i<100010;i++) for(int j=i;j<100010;j+=i) d[j]++; scanf("%d",&T); for(;T--;){ int a,b; scanf("%d%d",&a,&b); printf("%d\n",d[a]*d[b]-d[__gcd(a,b)]*(d[__gcd(a,b)]-1)/2); } return 0; }