Euler筛法 筛素数 and 筛最小质因子

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44510468/article/details/102751616

筛素数

洛谷-模板传送门

const int MAXN = 1e7+10;
bool isp[MAXN]; int su[MAXN]; // su 比 MAXN 小一个数量级合适 
void Euler ( int MAXN ) { 
	register int tot = 0;
    memset( isp, true, sizeof(isp) ), isp[0] = false, isp[1]= false;
	memset( su, 0, sizeof(su) );
    for ( register int i = 2; i <= MAXN; ++i ) { 
        if ( isp[i] ) su[tot++] = i; 
        for ( register int j = 0; j<tot&&i*su[j]<=MAXN; ++j ) { 
            isp[i*su[j]] = false; 
            if ( !(i%su[j]) ) break; 
        }
    }
}

筛最小质因子

牛客网-传送链接

const int MAXN = 3e7+10;
int minFactor[MAXN]; int su[MAXN]; // su 比 MAXN 小一个数量级合适 
void Euler ( int MAXN ) { 
	register int tot = 0;
    memset( minFactor, 0, sizeof(minFactor) ); // 0 和 1 最小质因子作为0 
	memset( su, 0, sizeof(su) );
    for ( register int i = 2; i <= MAXN; ++i ) { 
        if ( !minFactor[i] ) su[tot++] = i, minFactor[i] = i;
        for ( register int j = 0; j<tot&&i*su[j]<=MAXN; ++j ) { 
            minFactor[i*su[j]] = su[j];
            if ( !(i%su[j]) ) break; 
        }
    }
}

如题目所求, 求 n 个数字的最小质因子之和, 只需要对前 n 个数字加和 minFactor 即可

猜你喜欢

转载自blog.csdn.net/weixin_44510468/article/details/102751616