給定乙個數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遍歷所有的情況,找到答案就將答案加入ans
以k=8為例,設$x=2^a3^b5^c$
對於2,有$(2-1)2^\mid 8$,則a最大為4
對於3,有$(3-1)3^\mid 8$,則b最大為1
對於5,有$(5-1)5^\mid 8$,則c最大為1
再進行bfs搜尋,得到可行解ab
cx01
11540
01620
12031
02411
130發現某些偶數是無解的,隨著x的增大,phi(x)似乎越來越稀疏
#include #include #include #include using namespace std;typedef long long ll;
const int n=500000+5;
bool prime[n];
int p[n], tot=0;
//線篩
void initp()
return ret;
}typedef pairpr;
vectorans;
vectorv;
int num[100];//儲存狀態
void add()
return 0;
}
bzoj4173(尤拉函式)
資料大 10 15次方 公式複雜 不知道怎麼化簡 然後,感覺滿足打表找規律,發現sigema phi k k屬於s n,m n m。再求兩個phi就好,注意在括號裡面mod之後,需要在括號外面再mod一次,否則會wa。標準證明 總結1 很多的問題,通過小範圍資料打表,是非常便於幫助分析題目的性質的,...
bzoj 2818 尤拉函式
思路 就是對於某個數q,跟他互質的數p,kp和kq的最大公約數是k,那麼這個數能組成的答案的數量就是phi i 乘以某個質數,且乘積小於n 基於這種思路寫下這個 include include include include include include include include inclu...
BZOJ 4802 尤拉函式
已知n,求phi n 正整數n。n 10 18 輸出phi n 84 很明顯,這樣的題就是一道十分簡單的入門題。只是n比較大,但輸入和輸出都還沒有爆long long。如果輸入高精度數,那 就很噁心了 雖然可以定義大整數類big int phi n n 1 1 p 所以是miller rabin和p...