https://vjudge.net/contest/177165#rank
欢迎来刷我抄的专题.
因为数不大,很快就想到了质因数分解,然后容斥原理做一遍,但是取余的地方没细心.爆long long 却一直没发现.卡了很久.
思路大抵就是 : 质因数分解, 算每一个质因数的贡献,但我们平常所减的是求个数的,这里求完了个数后转变成和其实也蛮简单的, 我们这样考虑 1 - (n-1)中有a个p质因数的倍数, 那么这个质因数的贡献就是p*sum(1+2+..+a), 然后容斥消去重复 的就行了.
#include<cstdio>
#include<iostream>
#include<bitset>
#include<cstring>
#define ll long long
const int maxn = 5e5;
using namespace std;
const int mod = 1000000007;
bitset<maxn> judge;
int prime[maxn];
int tot = 0;
ll l,r,n;
ll co[maxn];
void init(){
judge.reset();
tot = 0;
for(int i = 2; i < maxn ; i++){
if(!judge[i]){
prime[tot++] = i;
}
for(int j = 0; j < tot ;j++){
if(i*prime[j] >= maxn)break;
judge[i*prime[j]] = 1;
if(i%prime[j] == 0){
break;
}
}
}
}
ll sum(ll n){
if(n%2==0){