æ¡ä»¶ãä¸æã«è¨ãæãããï¼
åé¡æ¦è¦
åã®æ´æ°
ãä¸ããããã
ãå¹³æ¹æ°
ã¨ããæ¡ä»¶ãæºãããããªçµ ã®åæ°ãæ±ããã
å¶ç´
èãããã¨
ããã¯ãæ¡ä»¶ã®è¨ãæãããé å¼µãåé¡ãã ãå¹³æ¹æ°ãã¨ããæ¡ä»¶ãæ±ããããããã«è¨ãæãããããããã¡ãã£ã¨é£ããã
å人çã«æã£ãã®ã¯ãå¹³æ¹æ ¹ãæã¡åºãã¨ããããããã£ãï¼ãã ããã ã®é¨åã¯å¥ã«èãããã¨ã¨ãã¦ã
㯠1 以ä¸ã¨ããï¼ã
ãå¹³æ¹æ°ã§ããã¨ã¯ã
ãæ´æ°ã§ãããã¨ã§ãã
- ãã®ãã¨ã¯ã
ãããããç°¡åã«ããã¨ãã«ãâ ã®ä¸èº«ãä¸è´ãããã¨ã¨åå¤ã§ãã
ãã¨ãã°ã ããããã¨
ã¨ãªã£ã¦å¹³æ¹æ°ã¨ãªãããããã¯æ¬¡ã®ããã«è§£éã§ããã
ã§ãã
ã§ãã
- ãããã¯
ã®é¨åãä¸è´ãã¦ããããããããã¨æ´æ°ã«ãªã
ãã®è¨ãæãããã§ããã°ããã¨ã¯ç°¡åã ã次ã®ããã«åé¡ã¯è¨ãæããããã
ãããããç°¡åã«ããã¨ãã® â ã®ä¸èº«ã
ã¨ããã
ã¨ããæ¡ä»¶ãæºãããããªçµ ã®åæ°ãæ±ããã
ããã¯ãmap
ãªã©ã使ã£ã¦éè¨å¦çãããã¨ã§ã容æã«çããããã
ãªãã0 ã¯ä¾å¤å¦çããå¿ è¦ãããã0 ã«ä½ãããã¦ã 0 ã§ãã£ã¦ãããã¯å¹³æ¹æ°ã§ããããã ã
å
¨ä½ã¨ãã¦ã ã®æ大å¤ã
ã¨ãã¦ãè¨ç®éã¯
ã¨ãªãã
ã³ã¼ã
#include <bits/stdc++.h> using namespace std; const int MAX = 210000; int main() { long long N, A; cin >> N; vector<long long> nums(MAX, 0); for (int i = 0; i < N; i++) { cin >> A; for (long long j = 2; j * j <= A; j++) { while (A % (j * j) == 0) { A /= j * j; } } nums[A]++; } // (0, ä»ã®æ°) ã®çµã®åæ° long long res = N * (N - 1) / 2 - (N - nums[0]) * (N - nums[0] - 1) / 2; // 0 ãå«ã¾ãªãçµã®åæ° for (long long val = 1; val < MAX; val++) { res += nums[val] * (nums[val] - 1) / 2; } cout << res << endl; }