結果
問題 | No.1747 Many Formulae 2 |
ユーザー |
![]() |
提出日時 | 2021-11-19 21:26:04 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 5 ms / 2,000 ms |
コード長 | 5,664 bytes |
コンパイル時間 | 2,041 ms |
コンパイル使用メモリ | 219,400 KB |
最終ジャッジ日時 | 2025-01-25 19:56:23 |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 19 |
ソースコード
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")#include <bits/stdc++.h>using namespace std;typedef long long ll;#define pb(...) emplace_back(__VA_ARGS__)#define mp(a, b) make_pair(a, b)#define all(x) x.begin(), x.end()#define rall(x) x.rbegin(), x.rend()#define lscan(x) scanf("%I64d", &x)#define lprint(x) printf("%I64d", x)#define rep(i, n) for (ll i = 0; i < (n); i++)#define rep2(i, n) for (ll i = (ll)n - 1; i >= 0; i--)#define REP(i, l, r) for (ll i = l; i < (r); i++)#define REP2(i, l, r) for (ll i = (ll)r - 1; i >= (l); i--)#define siz(x) (ll) x.size()template <class T>using rque = priority_queue<T, vector<T>, greater<T>>;template <class T>bool chmin(T &a, const T &b) {if (b < a) {a = b;return 1;}return 0;}template <class T>bool chmax(T &a, const T &b) {if (b > a) {a = b;return 1;}return 0;}__int128_t gcd(__int128_t a, __int128_t b) {if (a == 0)return b;if (b == 0)return a;__int128_t cnt = a % b;while (cnt != 0) {a = b;b = cnt;cnt = a % b;}return b;}long long extGCD(long long a, long long b, long long &x, long long &y) {if (b == 0) {x = 1;y = 0;return a;}long long d = extGCD(b, a % b, y, x);y -= a / b * x;return d;}struct UnionFind {vector<ll> data;int num;UnionFind(int sz) {data.assign(sz, -1);num = sz;}bool unite(int x, int y) {x = find(x), y = find(y);if (x == y)return (false);if (data[x] > data[y])swap(x, y);data[x] += data[y];data[y] = x;num--;return (true);}int find(int k) {if (data[k] < 0)return (k);return (data[k] = find(data[k]));}ll size(int k) {return (-data[find(k)]);}bool same(int x, int y) {return find(x) == find(y);}};template <int mod>struct Mod_Int {int x;Mod_Int() : x(0) {}Mod_Int(long long y) : x(y >= 0 ? y % mod : (mod - (-y) % mod) % mod) {}static int get_mod() {return mod;}Mod_Int &operator+=(const Mod_Int &p) {if ((x += p.x) >= mod)x -= mod;return *this;}Mod_Int &operator-=(const Mod_Int &p) {if ((x += mod - p.x) >= mod)x -= mod;return *this;}Mod_Int &operator*=(const Mod_Int &p) {x = (int)(1LL * x * p.x % mod);return *this;}Mod_Int &operator/=(const Mod_Int &p) {*this *= p.inverse();return *this;}Mod_Int &operator++() {return *this += Mod_Int(1);}Mod_Int operator++(int) {Mod_Int tmp = *this;++*this;return tmp;}Mod_Int &operator--() {return *this -= Mod_Int(1);}Mod_Int operator--(int) {Mod_Int tmp = *this;--*this;return tmp;}Mod_Int operator-() const {return Mod_Int(-x);}Mod_Int operator+(const Mod_Int &p) const {return Mod_Int(*this) += p;}Mod_Int operator-(const Mod_Int &p) const {return Mod_Int(*this) -= p;}Mod_Int operator*(const Mod_Int &p) const {return Mod_Int(*this) *= p;}Mod_Int operator/(const Mod_Int &p) const {return Mod_Int(*this) /= p;}bool operator==(const Mod_Int &p) const {return x == p.x;}bool operator!=(const Mod_Int &p) const {return x != p.x;}Mod_Int inverse() const {assert(*this != Mod_Int(0));return pow(mod - 2);}Mod_Int pow(long long k) const {Mod_Int now = *this, ret = 1;for (; k > 0; k >>= 1, now *= now) {if (k & 1)ret *= now;}return ret;}friend ostream &operator<<(ostream &os, const Mod_Int &p) {return os << p.x;}friend istream &operator>>(istream &is, Mod_Int &p) {long long a;is >> a;p = Mod_Int<mod>(a);return is;}};ll mpow2(ll x, ll n, ll mod) {ll ans = 1;while (n != 0) {if (n & 1)ans = ans * x % mod;x = x * x % mod;n = n >> 1;}return ans;}ll modinv2(ll a, ll mod) {ll b = mod, u = 1, v = 0;while (b) {ll t = a / b;a -= t * b;swap(a, b);u -= t * v;swap(u, v);}u %= mod;if (u < 0)u += mod;return u;}// constexpr int mod = 1000000007;constexpr int mod = 998244353;// constexpr int mod = 31607;using mint = Mod_Int<mod>;mint mpow(mint x, ll n) {mint ans = 1;while (n != 0) {if (n & 1)ans *= x;x *= x;n = n >> 1;}return ans;}// ----- library -------// ----- library -------int main() {ios::sync_with_stdio(false);std::cin.tie(nullptr);cout << fixed << setprecision(15);string s;cin >> s;int n = s.length();int ans = 0;rep(t, 1 << (n - 1)) {ll val = 0, tmp = 0;rep(i, n) {tmp *= 10;tmp += s[i] - '0';if (t >> i & 1) {val += tmp;tmp = 0;}}val += tmp;int flag = 1;for (ll i = 2; i * i <= val; i++) {if (val % i == 0)flag = 0;}if(val == 1)flag = 0;ans += flag;}cout << ans << endl;}