結果
| 問題 |
No.3296 81-like number
|
| コンテスト | |
| ユーザー |
srjywrdnprkt
|
| 提出日時 | 2025-10-09 17:42:12 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 6 ms / 2,000 ms |
| コード長 | 2,893 bytes |
| コンパイル時間 | 6,838 ms |
| コンパイル使用メモリ | 290,332 KB |
| 実行使用メモリ | 7,716 KB |
| 最終ジャッジ日時 | 2025-10-09 17:42:27 |
| 合計ジャッジ時間 | 5,362 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 15 |
ソースコード
#include <bits/stdc++.h>
//#include <atcoder/modint>
using namespace std;
//using namespace atcoder;
using ll = long long;
//using mint = modint998244353;
struct Erat{
vector<int> spf;
vector<bool> prime_table;
vector<int> mobius;
Erat(int m){
assert(m <= 10000000);
spf.resize(m+1, -1);
prime_table.resize(m+1, 1);
mobius.resize(m+1, 1);
prime_table[0] = 0;
prime_table[1] = 0;
spf[1] = 1;
for (int i=2; i<=m; i++){
if (prime_table[i]){
spf[i] = i;
mobius[i] = -1;
for (int j=i*2; j<=m; j+=i){
prime_table[j] = 0;
if (spf[j] == -1) spf[j] = i;
if ((j/i) % i == 0) mobius[j] = 0;
else mobius[j] = -mobius[j];
}
}
}
}
map<int, int> prime_factor(int n) const{
map<int, int> res;
while(n != 1){
res[spf[n]]++;
n /= spf[n];
}
return res;
}
vector<int> all_factor(int n) const{
vector<int> res={1};
map<int, int> prime = prime_factor(n);
for (auto [p, e] : prime){
int x=1, m=res.size();
for (int j=0; j<e; j++){
x *= p;
for (int k=0; k<m; k++) res.push_back(res[k] * x);
}
}
sort(res.begin(), res.end());
return res;
}
inline bool is_prime(int n) const{return prime_table[n];}
template<typename T>
vector<T> fast_zeta(const vector<T> &vec) const{
int n = vec.size();
vector<T> res=vec;
for (int i=2; i<n; i++){
if (!is_prime(i)) continue;
for (int j=(n-1)/i; j>=1; j--) res[j] += res[j*i];
}
return res;
}
template<typename T>
vector<T> fast_mobius(const vector<T> &vec) const{
int n = vec.size();
vector<T> res=vec;
for (int i=2; i<n; i++){
if (!is_prime(i)) continue;
for (int j=1; i*j<n; j++) res[j] -= res[j*i];
}
return res;
}
template<typename T>
vector<T> gcd_convolution(const vector<T> & _f, const vector<T> & _g){
vector<T> f=_f, g=_g, h;
int n = max(f.size(), g.size());
f.resize(n);
g.resize(n);
h.resize(n);
f = fast_zeta(f);
g = fast_zeta(g);
for (int i=1; i<n; i++) h[i] = f[i] * g[i];
return fast_mobius(h);
}
};
int main(){
cin.tie(nullptr);
ios_base::sync_with_stdio(false);
ll ans=0, N;
cin >> N;
Erat erat(100000);
for (int p=1; p<=100000; p++){
if (erat.is_prime(p)){
ll pw=(ll)p*p;
while(pw<=N){
ans += pw;
pw *= p;
}
}
}
cout << ans << endl;
return 0;
}
srjywrdnprkt