hdu 2824 线性筛素数求欧拉函数+前缀和
2015-01-21 20:50
246 查看
因为只是区间查询,没有修改,所以只需要提前求出前缀和即可,本题难点在于数据量大导致数组用起来比较紧张,所以要重复使用顶用过的数组
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #define MAX 3000001 using namespace std; int p[1000000],pt; long long phi[MAX]; bool m[MAX]; int N = 3000001; void init () { memset ( m , 0 , sizeof ( m ) ); pt = 0; phi[1] = 1; int k; for ( int i = 2 ; i < N ; i++ ) { if (!m[i]) p[pt++]=i,phi[i]=i-1,m[i]=1; for ( int j=0;j<pt&&(k=i*p[j])<N;j++) { m[k] = 1; if ( i%p[j]==0 ) { phi[k]=phi[i]*p[j]; } else phi[k]=phi[i]*(p[j]-1); } } } int main ( ) { init (); for ( int i = 2 ; i < N ; i++ ) phi[i] = phi[i]+phi[i-1]; int left , right; while ( ~scanf ( "%d%d" , &left , &right ) ) printf ( "%I64d\n" , phi[right]-phi[left-1] ); return 0; }
相关文章推荐
- HDU - 2824 -The Euler function【欧拉函数前缀和】
- 【线性筛求欧拉函数】HDU 2824
- 线性时间内筛素数+欧拉函数+莫比乌斯函数
- HDU 4548 美素数 (素数打表+前缀和)
- A%BProblem——线性筛素数与前缀和
- 多校第三场 1002 hdu 5317 RGCDQ (筛素数+前缀和)
- HDU 2824 The Euler function【欧拉函数入门题】
- 线性求欧拉函数值和筛选素数
- 【数论内容】线性筛素数,线性筛欧拉函数,求前N个数的约数个数
- HDU 3823 Prime Friend 线性筛选素数
- 模板整理:数论---线性筛素数,线性筛欧拉函数
- 【数论】线性筛素数,线性筛欧拉函数,求前N个数的约数个数
- hdu 5317 RGCDQ(素数筛选法+前缀和)
- hdu 2824 欧拉函数 O(nlogn) 和O(n)
- hdu 1695 GCD (素数筛选 + 欧拉函数 + 容斥原理)
- 3813: 奇数国 线段树+线性筛素数+欧拉函数+乘法逆元+压位
- HDU 2824 求区间欧拉函数和
- hdu 5317 RGCDQ (2015多校第三场第2题)素数打表+前缀和相减求后缀(DP)
- 数学_线性筛法建立素数表(HDU_1262)
- HDU2824 欧拉函数