//各aについて、mod M = a, M - aのうち片方しか取れない //0, M / 2 は それぞれ1個まで。 #include #include #include #define int long long using namespace std; int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } int n, m; int a[100000]; map mp; signed main() { int i; cin >> n >> m; for (i = 0; i < n; i++) { cin >> a[i]; a[i] %= m; if (mp.find(a[i]) == mp.end()) mp[a[i]] = 0; mp[a[i]]++; } for (map::iterator it = mp.begin(); it != mp.end(); it++) { int mod = it->first; if (mod == 0 || mod * 2 == m) { //不注意ポイント mp[mod] = min(mp[mod], 1LL); } } int pair_cnt = 0, single_cnt = 0; for (map::iterator it = mp.begin(); it != mp.end(); it++) { int mod = it->first; if (mp.find(m - mod) != mp.end()) { pair_cnt += max(mp[mod], mp[m - mod]); } else { single_cnt += mp[mod]; } } cout << pair_cnt / 2 + single_cnt << endl; return 0; }