51nod 1602 矩陣方程的解

2022-05-08 03:21:10 字數 2186 閱讀 7420

這個行向量顯然就是莫比烏斯函式啦,好蠢的隱藏方法= =

然後我們嘗試二分,二分的話要求乙個這個東西

\(h(n) = \sum_^ \mu(i) == d\)

當然\(\mu(x)\)由於一些很好的性質,這個東西可以用分類討論做出來

眾所周知,求\(\mu\)不為0的數的方法就是容斥求無平方因子數

\(g(n) = \sum_^} \mu(i) \lfloor \frac} \rfloor\)

這樣我們已經可以快速求得\(\mu(i) = 0\)的位置有多少了,就是\(n - g(n)\)

再求乙個\(f(n)\)作為莫比烏斯函式的字首和,也就是1和-1的差值

可以用\(f(n)\)和\(g(n)\)和一點特判快速求出來1和-1的個數,顯然\(f(n)\)需要的複雜度 遠大於\(g(n)\),是\(o(n^)\)的

夢想選手快樂的寫了一發,只過了d = 0的點,慘兮兮

然後經過努力的嘗試,發現如果\(r - l < 10^\)的時候停止二分,轉而改為通過類似埃氏篩的方法暴力求這\(10^\)個位置的mu函式,然後挨個列舉看看**是答案

這樣的話可以在3s左右通過了

#include #define fi first

#define se second

#define pii pair#define mp make_pair

#define pb push_back

#define space putchar(' ')

#define enter putchar('\n')

#define eps 1e-10

#define ba 47

#define maxn 1000005

//#define ivorysi

using namespace std;

typedef long long int64;

typedef unsigned int u32;

typedef double db;

templatevoid read(t &res)

while(c >= '0' && c <= '9')

res *= f;

}templatevoid out(t x)

if(x >= 10)

putchar('0' + x % 10);

}int prime[10000005],tot,mu[10000005],m[10000005];

int c[10000005];

int64 val[10000005];

bool nonprime[10000005];

struct hash e[10000005];

int sume,head[1000000],mo = 974711;

void add(int64 x,int64 v)

int64 query(int64 x)

return -1e18;

}}hsh;

mapzz;

int64 f(int64 n)

//zz[n] =res;

hsh.add(n,res);

return res;

}int64 g(int64 n)

return ans;

}int getmu(int64 x)

}if(x != 1) r = -r;

return r;

}int64 check(int64 n,int d)

int main()

for(int j = 1 ; j <= tot ; ++j)

m[i] = m[i - 1] + mu[i];

}int64 d,k;

read(d);read(k);

int64 l = 1,r = 1e10;

while(r - l > 1e6)

for(int i = 0 ; i <= r - l ; ++i)

for(int i = 1 ; i <= tot ; ++i) }}

int64 x = check(l - 1,d);

for(int i = 0 ; i <= r - l ; ++i)

}//printf("%.3lf\n",1.0 * clock() / clocks_per_sec);

return 0;

}

51nod 1573 分解 矩陣快速冪

51nod 演算法馬拉松17 告別奧運 b 分解 51nod 演算法馬拉松17 告別奧運 b 分解 題意 給出乙個 n 問 1 2 n能否拆成m m 1 的形式,如果能,輸出 m 否則輸出 no。想法觀察 1 2 n,它總能寫成a b2 的形式,如果a2 n m,2 b2 n m 1 或者a2 n ...

51nod 1537 分解(矩陣快速冪)

參考 標程中提到了構造對偶式,我去,這咋整啊,搞不了 但是就根據標程來推,這些東西都能推出來。奇偶都能推出來sqrt m sqrt m 1 a b sqrt 2 然後根據 1 2 n a b 2打個表,找規律就好了。找不到規律的話,拿著序列去oeis一查就知道了 include using name...

51Nod 1537 分解(矩陣快速冪)

博主鏈結 給乙個n,求出對應m滿足 1 sqrt 2 n sqrt m sqrt m 1 可以將 1 sqrt 2 n一項項拆開後發現 sqrt 1 sqrt 2 sqrt 9 sqrt 8 sqrt 49 sqrt 50 sqrt 492 9 sqrt 492 10 發現如果n為奇數f n f n...