BZOJ 3643 Phi的反函式

2021-08-02 08:29:26 字數 649 閱讀 7255

by zky

~~~~~~~~~~~~~~~~~~~~~~~~~~~

尤拉函式+思路+dfs~

ans一定是a1^b1*a2^b2*...*ak^bk,所以n一定是a1^(b1-1)*a2^(b2-1)*...*ak^(bk-1)*(a1-1)*(a2-1)*...*(ak-1)。

這樣,我們就可以dfs有哪些質數是a,然後用n除以它們-1後再看是不是ak^(b1-1)相乘的形式。

如果在外面定義了ij,就不要再在for迴圈裡面定義了,這一點要注意啊!

#include#include#includeusing namespace std;

int n,a[10001],c[10001],k;

bool b[100001];

unsigned int ans=(1<<31)+1,kk=ans;

void dfs(int u,int res,long long now,int las)

{ int tot,j;

if(u>1)

{ tot=res;

for(int i=1;ia[0]) return;tot=res;

for(int i=1;itot && res/(tot-1)*tot*now

BZOJ3643 Phi的反函式(數論 dfs)

這裡放傳送門 這題記得某天學長出過胡策。然後一臉懵逼 這玩意兒也能求?這題用到了乙個非常常用非常重要的性質 對於long long級別的數字,它不同的質因子個數非常小,最多不會超過15個。因為最小的十來個質數乘起來就已經變得很大了。這就說明我們可以用爆搜來搞這個東西。對於這道題來說我們知道乙個數的p...

bzoj3643 Phi的反函式 數學 搜尋

題意 已知 x 求出 phi n x 的最小 n 不得不說今天刷了一堆 相對而言 思博大爆搜之後來這麼一道相對有思考價值的數學題真是強啊 首先我們需要記住乙個基本事實 在 int 範圍內,每個數的同乙個質因數不會成為這個數字的 31 次方,乙個數存在的不同質因數不會超過 10 個。理由很簡單 首先 ...

BZOJ3643 尤拉函式,搜尋

給定乙個數x,我們可以求出phi x 那給定乙個數k k 1e6 如何求出phi x k的解呢 容易知道k為奇數時唯有k 1有解x 1,其餘無解 假設n有素冪因子分解 n cdots 因為 phi x prod limits p j 1 所以 1由此篩選出一些質數,同時記錄它的最高冪次 然後用dfs...