結果
| 問題 |
No.1653 Squarefree
|
| コンテスト | |
| ユーザー |
packer_jp
|
| 提出日時 | 2021-08-20 23:06:02 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 4,602 bytes |
| コンパイル時間 | 2,066 ms |
| コンパイル使用メモリ | 196,288 KB |
| 最終ジャッジ日時 | 2025-01-24 00:22:55 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 13 WA * 1 TLE * 24 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define all(a) (a).begin(), (a).end()
#define uniq(a) (a).erase(unique(all(a)), (a).end())
using ll = long long;
using ull = unsigned long long;
using vll = vector<ll>;
using pll = pair<ll, ll>;
ull bit(int n) { return 1ull << n; }
template <typename T> using priority_queue_rev = priority_queue<T, vector<T>, greater<T>>;
constexpr double PI = 3.1415926535897932384626433832795028;
constexpr ll DY[9] = {0, 1, 0, -1, 1, 1, -1, -1, 0};
constexpr ll DX[9] = {1, 0, -1, 0, 1, -1, -1, 1, 0};
ll sign(ll a) { return (a > 0) - (a < 0); }
ll cdiv(ll a, ll b) { return (a - 1 + b) / b; }
template <typename T> T sq(const T &a) { return a * a; }
template <typename T, typename U> bool chmax(T &a, const U &b) {
if (a < b) {
a = b;
return true;
}
return false;
}
template <typename T, typename U> bool chmin(T &a, const U &b) {
if (b < a) {
a = b;
return true;
}
return false;
}
template <typename T, typename U> ostream &operator<<(ostream &os, const pair<T, U> &a) {
os << "(" << a.first << ", " << a.second << ")";
return os;
}
template <typename T, typename U, typename V> ostream &operator<<(ostream &os, const tuple<T, U, V> &a) {
auto [t, u, v] = a;
os << "(" << t << ", " << u << ", " << v << ")";
return os;
}
template <typename T> ostream &operator<<(ostream &os, const vector<T> &a) {
os << "(";
for (auto itr = a.begin(); itr != a.end(); itr++) { os << *itr << (next(itr) != a.end() ? ", " : ""); }
os << ")";
return os;
}
template <typename T> ostream &operator<<(ostream &os, const deque<T> &a) {
os << "(";
for (auto itr = a.begin(); itr != a.end(); itr++) { os << *itr << (next(itr) != a.end() ? ", " : ""); }
os << ")";
return os;
}
template <typename T> ostream &operator<<(ostream &os, const set<T> &a) {
os << "{";
for (auto itr = a.begin(); itr != a.end(); itr++) { os << *itr << (next(itr) != a.end() ? ", " : ""); }
os << "}";
return os;
}
template <typename T> ostream &operator<<(ostream &os, const multiset<T> &a) {
os << "{";
for (auto itr = a.begin(); itr != a.end(); itr++) { os << *itr << (next(itr) != a.end() ? ", " : ""); }
os << "}";
return os;
}
template <typename T, typename U> ostream &operator<<(ostream &os, const map<T, U> &a) {
os << "{";
for (auto itr = a.begin(); itr != a.end(); itr++) { os << *itr << (next(itr) != a.end() ? ", " : ""); }
os << "}";
return os;
}
struct setup {
static constexpr ll PREC = 20;
setup() {
cout << fixed << setprecision(PREC);
cerr << fixed << setprecision(PREC);
};
} setup;
#ifdef ONLINE_JUDGE
#define dump(...) (void(0))
#else
void debug() { cerr << endl; }
template <typename Head, typename... Tail> void debug(Head &&head, Tail &&... tail) {
cerr << head;
if (sizeof...(Tail)) cerr << ", ";
debug(tail...);
}
#define dump(...) cerr << __LINE__ << ": " << #__VA_ARGS__ << " = ", debug(__VA_ARGS__)
#endif
struct rep {
struct itr {
int v;
itr(int v) : v(v) {}
void operator++() { ++v; }
int operator*() const { return v; }
bool operator!=(const itr &i) const { return v != i.v; }
};
int l, r;
rep(int r) : l(0), r(r) {}
rep(int l, int r) : l(l), r(r) {}
itr begin() const { return l; };
itr end() const { return r; };
};
struct per {
struct itr {
int v;
itr(int v) : v(v) {}
void operator++() { --v; }
int operator*() const { return v; }
bool operator!=(const itr &i) const { return v != i.v; }
};
int l, r;
per(int r) : l(0), r(r) {}
per(int l, int r) : l(l), r(r) {}
itr begin() const { return r - 1; };
itr end() const { return l - 1; };
};
template <typename F> long long discrete_binary_search(long long ok, long long ng, F is_ok) {
while (abs(ok - ng) > 1) {
long long mid = (ok + ng) / 2;
(is_ok(mid) ? ok : ng) = mid;
}
return ok;
}
int main() {
ll l, r;
cin >> l >> r;
vll ng(r - l + 1);
auto start = [&](ll x) -> ll { return l + (x - l % x) % x; };
for (ll i : rep(1, 1e6 + 1)) {
for (ll j = start(i); j <= r; j += i) {
ll y = j / i;
ll rt = discrete_binary_search(1, y, [&](ll rt) -> bool { return rt * rt <= y; });
if (rt != 1 && rt * rt == y) ng[j - l] = 1;
}
}
for (ll i : rep(2, 1e6 + 1)) {
for (ll j = start(i * i); j <= r; j += i * i) { ng[j - l] = 1; }
}
cout << r - l + 1 - accumulate(all(ng), 0ll) << endl;
}
packer_jp