https://projecteuler.net/problem=516
。。观察符合条件的原数 x 的 Pattern。。
显然形如
x = p1p2p3…pn2^a3^b5^c
且 pi = 2^d3^e^5^f + 1
。。。
const int PMAX = 1000000;
VI P; bitset<PMAX> isC;
#define ii (i*P[j])
void sieve(){
FOR(i, 2, PMAX){
if (!isC[i]) P.PB(i);
for (int j=0;j<SZ(P)&&ii<PMAX;++j){
isC[ii]=1; if (!(i%P[j])) break;
}
}
}
#undef ii
inline bool isPrime(LL n){
ECH(it, P){
if (*it >= n) return true;
if (n % *it == 0) return false;
}
return true;
}
vector<LL> PP, P235; LL n;
void dfs1(int k = 0, LL n = 1){
if (k == 3){
P235.PB(n);
if (n+1 > 5 && n+1 <= ::n && isPrime(n+1)) PP.PB(n+1);
}
else{
do{
dfs1(k+1, n);
n *= P[k];
} while (n <= ::n);
}
}
uint z = 0;
void dfs3(int k, LL n){
ECH(it, P235){
if ((double)*it * n <= ::n){
z += *it * n;
}
}
}
void dfs2(int k = 0, LL n = 1){
if (k == PP.size()){
dfs3(0, n);
}
else{
dfs2(k+1, n);
if (n <= ::n / PP[k] ) dfs2(k+1, n * PP[k]);
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("/users/xiaodao/desktop/Exercise/in.txt", "r", stdin);
//freopen("/users/xiaodao/desktop/Exercise/out.txt", "w", stdout);
#endif
sieve(); n = 1e12;
dfs1(); SRT(PP); SRT(P235);
dfs2();
cout << z << endl;
}




Alca
Amber
Belleve Invis
Chensiting123
Edward_mj
Fotile96
Hlworld
Kuangbin
Liyaos
Lwins
LYPenny
Mato 完整版
Mikeni2006
Mzry
Nagatsuki
Neko13
Oneplus
Rukata
Seter
Sevenkplus
Sevenzero
Shirleycrow
Vfleaking
wangzhpp
Watashi
WJMZBMR
Wywcgs
XadillaX
Yangzhe
三途川玉子
About.me
Vijos
