思路:就是對於某個數q,跟他互質的數p,kp和kq的最大公約數是k,那麼這個數能組成的答案的數量就是phi[i]乘以某個質數,且乘積小於n
基於這種思路寫下這個**
但是這樣複雜度是o(lgn*n),超時,#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
#define imax 2147483646
#define linf 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
using
namespace std;
const
int maxn =
1e7+10;
int n;
int phi[maxn]
, v[maxn]
, pre[maxn]
,m;void
euler
(int n)
void
prime
(int n)}}
intmain()
使用基於線性方法去求尤拉函式,進一步可以寫出這樣的**。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
#define imax 2147483646
#define linf 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
using
namespace std;
const
int maxn =
1e7+10;
ll phi[maxn]
;int v[maxn]
, pre[maxn]
, m;
int n;
intmain()
for(
int j =
1; j <= m; j++
) phi[i]
+= phi[i -1]
;//phi表示前i個尤拉函式的和
} ll ans =0;
for(
int i =
1; i <= m; i++
) ans +
= phi[n / pre[i]];
printf
("%lld\n"
, ans *
2- m)
;return0;
}
bzoj4173(尤拉函式)
資料大 10 15次方 公式複雜 不知道怎麼化簡 然後,感覺滿足打表找規律,發現sigema phi k k屬於s n,m n m。再求兩個phi就好,注意在括號裡面mod之後,需要在括號外面再mod一次,否則會wa。標準證明 總結1 很多的問題,通過小範圍資料打表,是非常便於幫助分析題目的性質的,...
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...
尤拉函式 尤拉定理
尤拉函式 對正整數 n,尤拉函式 是小於等於 n的數中與 n互質的數的數目 此函式以其首名研究者尤拉命名 euler so totientfunction 它又稱為 euler stotient function 函式 尤拉商數等。例如 8 4,因為 1,3,5,7均和8 互質。注 n為1時尤拉函式...