LightOJ

来源:互联网 发布:mac os sierra 卡 编辑:程序博客网 时间:2024/06/16 11:49

这个题 就是欧拉函数类筛法(素数的筛法打表)打表

开始各种 TLE, MLE

后来慢慢优化成 unsigned long long 后,因为输出错误还WA了一次


#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<cmath>#include<set>#include<queue>#include<stack>#include<map>using namespace std;typedef long long ll;typedef unsigned long long ull;const int maxn = 5e6 + 7, INF = 0x7f7f7f7f, mod = 1e9 + 7;int n, m;ull phi[maxn];int prim[maxn];void get_ouler() {    memset(phi, 0, sizeof phi);    int id = 0;    for(int i = 2; i < maxn; ++i) {        if(!phi[i]) {            phi[i] = (i-1);            prim[id++] = i;        }        for(int j = 0; j < id && i*prim[j] < maxn; ++j) {            if(i % prim[j] ) phi[i*prim[j]] = phi[i] * phi[prim[j]];            else {                phi[i*prim[j]] = phi[i] * prim[j];                break;            }        }    }    phi[1] = 1;    for(int i = 2; i < maxn; ++i) {        phi[i] = phi[i]*phi[i] + phi[i-1];    }}int main() {    get_ouler();    int T;    scanf("%d", &T);    for(int tt = 1; tt <= T; tt++) {        int a, b;        scanf("%d%d", &a, &b);        printf("Case %d: %llu\n", tt, phi[b] - phi[a-1]);    }    return 0;}


原创粉丝点击