問題の意味
定義の$ f(x)が$順序付けタプル$ $以下の条件(a、b)は数(すなわち、$(a、b)はプログラムの$ $(Bと共に、A)$異なるシナリオが考えられている満たします):
- $ X = ABの$
- (1よりすなわち、完全な方形要因他のではない)の$ $ $ Bが$無平方因子
\回10 ^ 7 $求$ \ displaystyle \ sum_ {i = 1} ^ NF(I)、1 \当量のn \の当量2。
分析
明らかに、$をf(n)は$リニアふるいを検討し、乗法関数です。
- の$ X $は素数は、$ F(X)= 2 $、すなわち$(1、x)は$と$(X、1)$である場合、
- 場合の$ X $最低品質の$ P $の因子、および$ P \ NMID \ FRAC {X} {P} $時間は、$ F(X)= F(P)は、f(\ FRAC {X} {P}) = 2F(\ FRAC {X} {P})$。
- 場合の$ Xの$ pが$の最小素因数の$、および$ P \中間\ FRAC {X} {P} $
- $ P \中間の\ FRAC {X} {P ^ 2} $場合、$ X $ $ P $少なくとも3のインデックスの、すなわち関係なく$(B)$を分割する方法の2つの数が存在しなければなりません$ pは法的ソリューションの2より大きい、即ち、不在の指標に等しい数を$
- そうでない場合、$ X $ $ P $ 2それぞれのインデックス、これら2つの点$ P $ $ $ A $へとB $、残り$ \ FRACに{X} {P ^ 2} $が子供であります問題、すなわち、$のF(x)は= F(\ FRAC {X} {P ^ 2})= F(\ FRAC {X} {P})ここで、f(\ FRAC {1} {P})= F(\ FRAC {X} {P})/ 2 $
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 const int型 MAXN = 2E7 + 10 。 int型のn; int型VIS [MAXN]、[MAXN]、primeCntは素数。 INT F [MAXN]は、[MAXN]です。 // F(I)的前缀和 ボイドseive() { F [ 1 ] = 1 。 以下のために(int型 I = 2 ; I <= MAXN; iは++ ) { 場合(!VIS [I]) { 素数[ ++ primeCnt] = I。 F [I] = 2; } のために(int型の J = 1 ; J <= primeCnt &&(長い 長い)私は*は素数[J] <= MAXNあり、j ++ ) { VIS [iが *素数[J] = 真。 もし(I%素数[j] == 0 ) { F [iが素数を* [J] =(I /素数[J]%の素数[j] == 0)?0:[I / F 素数[J]。 破ります; } 他 F = Fの[I] * [iが素数[J] *] 2 。 } } } INT メイン() { seive()。 以下のために(INTは I = 1 ; I <= MAXN; iは++)S [I] = sの[I- 1 ] + F [i]は、 int型T; scanf関数(" %のD "、&T)。 一方、(T-- ) { scanf関数(" %のD "、&N) printf(" %d個の\ n " 、S [N])。 } }
参考リンク:https://oi.men.ci/jsk-30999/#%D0%B4%D0%B0%D0%BB%D0%B5%D0%B5