关于RE

廖悦扬  •  4个月前


本题若使用欧拉筛,需要1e7大小的数组,会导致RE,请问如何解决


评论:

Lawa

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MaxN = 10000100;
int n, tot, check[MaxN], prime[MaxN];
ll ans, phi[MaxN];

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

    phi[1] = 1ll;
    for(int i = 2; i <= n; i++){
        if (!check[i]) { phi[i] = i - 1; prime[++tot] = i; }
        for (int j = 1; j <= tot; j++){
            if (i * prime[j] > n) break;
            check[i * prime[j]] = 1;
            if (i % prime[j] == 0){ phi[i * prime[j]] = phi[i] * prime[j]; break; }
            else { phi[i * prime[j]] = phi[i] * (prime[j] - 1); }
        }
    }
    for(int i = 1; i <= n; i++) phi[i] += phi[i-1];

    for(int i = 1; i <= tot; i++) ans += phi[n / prime[i]];
    printf("%lld\n", ans * 2 - tot);    
    return 0;    
}

baim.  •  4个月前

过了过了


廖悦扬  •  4个月前

qwq


baim.  •  4个月前

qwq


baim.  •  4个月前

蔡悠然  •  4个月前