結果
問題 |
No.1409 Simple Math in yukicoder
|
ユーザー |
![]() |
提出日時 | 2021-02-26 22:44:52 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,407 bytes |
コンパイル時間 | 1,938 ms |
コンパイル使用メモリ | 197,020 KB |
最終ジャッジ日時 | 2025-01-19 06:18:38 |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 24 TLE * 34 |
ソースコード
#include <bits/stdc++.h> using namespace std; vector<int> fact(int p) { vector<int> res; for (int i = 2; i * i <= p; ++i) { res.push_back(i); while (p % i == 0) p /= i; } if (p > 1) res.push_back(p); return res; } long long modpow(long long b, long long x, long long mod) { long long res = 1; while (x) { if (x & 1) (res *= b) %= mod; (b *= b) %= mod; x >>= 1; } return res; } int x, v; vector<int> res; int calc(int p, vector<int>& mp) { int res = x * v, pr = x * v + 1; for (auto x : mp) { while (res % x == 0 && modpow(p, res / x, pr) == 1) res /= x; } return res; } void dfs(int now = 0, int par = 0); int main() { int t; cin >> t; while (t--) { cin >> v >> x; auto vec = fact(x * v); vector<int> res; for (int i = 1; i <= x * v; ++i) if (modpow(i, x, x * v + 1) == 1) res.push_back(i); for (int i = 0; i < x; ++i) cout << res[i] << " \n"[i == x - 1]; } return 0; } void dfs(int now, int par) { if (now == x) { vector<long long> vec(x, 1); for (int i = 0; i < x; ++i) { long long sum = 0; for (int j = 0; j < x; ++j) sum += (vec[j] *= res[j]); if (sum % (v * x + 1) != (i == x - 1 ? x : 0)) return; } for (auto p : res) cout << p << " "; cout << endl; return; } int xv = x * v; for (int i = par + 1; i <= xv; ++i) { res[now] = i; dfs(now + 1, i); } }