結果

問題 No.3692 Calculate Mu
コンテスト
ユーザー tnakao0123
提出日時 2026-09-07 16:35:47
言語 C++17
(gcc 15.3.0 + boost 1.92.0 + ACL)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 5 ms / 2,000 ms
+ 963µs
コード長 1,348 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,066 ms
コンパイル使用メモリ 77,828 KB
実行使用メモリ 6,272 KB
最終ジャッジ日時 2026-09-07 16:35:52
合計ジャッジ時間 3,657 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 12
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

/* -*- coding: utf-8 -*-
 *
 * 3692.cc:  No.3692 Calculate Mu - yukicoder
 */

#include<cstdio>
#include<vector>
#include<algorithm>
#include<utility>

using namespace std;

/* constant */

const int MAX_P = 1000000 + 100;

/* typedef */

using ll = long long;
using vb = vector<bool>;
using vi = vector<int>;
using pli = pair<ll,int>;
using vpli = vector<pli>;

/* global variables */

vb primes;
vi pnums;

/* subroutines */

int gen_primes(int maxp) {
  primes.assign(maxp + 1, true);
  primes[0] = primes[1] = false;
  pnums.clear();

  int p;
  for (p = 2; p * p <= maxp; p++)
    if (primes[p]) {
      pnums.push_back(p);
      for (int q = p * p; q <= maxp; q += p) primes[q] = false;
    }
  for (; p <= maxp; p++)
    if (primes[p]) pnums.push_back(p);
  return (int)pnums.size();
}

vpli prime_decomp(ll n) {
  vpli pds;

  for (auto pi: pnums) {
    if ((ll)pi * pi > n) {
      if (n > 1) pds.push_back(pli(n, 1));
      break;
    }

    if (n % pi == 0) {
      int fi = 0;
      while (n % pi == 0) n /= pi, fi++;
      pds.push_back(pli(pi, fi));
    }
  }
  return pds;
}


/* subroutines */

/* main */

int main() {
  ll n;
  scanf("%lld", &n);

  gen_primes(MAX_P);
  auto pds = prime_decomp(n);

  for (auto [p, d]: pds)
    if (d >= 2) { puts("0"); return 0; }

  printf("%d\n", (pds.size() & 1) ? -1 : 1);
  
  return 0;
}

0