1. 程式人生 > >求與N互質數的個數

求與N互質數的個數

求解與n(1-n-1)互質的質因子的個數

解析:(轉)

定義:對於正整數n,φ(n)是小於或等於n的正整數中,與n互質的數的數目。

    例如:φ(8)=4,因為1357均和8互質。

性質:1.p是質數,φ(p)= p-1.

2.n是質數pk次冪,φ(n)=(p-1)*p^(k-1)。因為除了p的倍數都與n互質

3.尤拉函式是積性函式,若m,n互質,φ(mn)= φ(m)φ(n).

  根據這3條性質我們就可以推出一個整數的尤拉函式的公式。因為一個數總可以寫成一些質數的乘積的形式。

E(k)=(p1-1)(p2-1)...(pi-1)*(p1^(a1-1

))(p2^(a2-1))...(pi^(ai-1))

    = k*(p1-1)(p2-1)...(pi-1)/(p1*p2*...*pi)

    = k*(1-1/p1)*(1-1/p2)...(1-1/pk)

在程式中利用尤拉函式如下性質,可以快速求出尤拉函式的值(aN的質因素)

  若( N%==0&&(N/a)%==0)則有:E(N)= E(N/a)*a;

  若( N%==0&&(N/a)%!=0)則有:E(N)= E(N/a)*(a-1);

文章原連結:http://www.cnblogs.com/jackge/archive/2013/01/03/2842818.html

相關推薦

N互質數個數

求解與n(1-n-1)互質的質因子的個數 解析:(轉) 定義:對於正整數n,φ(n)是小於或等於n的正整數中,與n互質的數的數目。     例如:φ(8)=4,因為1,3,5,7均和8互質。 性質:1.若p是質數,φ(p)= p-1. 2.若n是質數p的k

尤拉函式(n互質的數的個數

求解與n(1-n-1)互質的質因子的個數 解析:(轉) 定義:對於正整數n,φ(n)是小於或等於n的正整數中,與n互質的數的數目。     例如:φ(8)=4,因為1,3,5,7均和8互質。 性質:1.若p是質數,φ(p)= p-1. 2.若n是質數p的k

尤拉函式——小於n的數中n互質數的數目

尤拉函式 簡介 在數論,對正整數n,尤拉函式是小於n的數中與n互質的數的數目。此函式以其首名研究者尤拉命名(Ruler’so totient function),它又稱為Euler’s totient function、φ函式、尤拉商數等。 例如φ(8)=4,因為1,3

【演算法】尤拉函式——小於n的數中n互質數的數目

尤拉函式 簡介 在數論,對正整數n,尤拉函式是小於n的數中與n互質的數的數目。此函式以其首名研究者尤拉命名(Ruler’so totient function),它又稱為Euler’s totient function、φ函式、尤拉商數等。 例如φ(8)=4

容斥+dfs1~n質數個數

n<=100000000 #include<stdio.h> #include<string.h> #include<math.h> int flag[10006]; int num[10000],tota

容斥原理 —— 1~n有多少個數k互質(二進位制演算法詳細解釋&模板)

這裡有一道經典的例題,可以看一下:點選開啟連結 這裡的n可能要大於k的,所以不能用尤拉函式去做。 我們首先把k分解質因數,儲存到p陣列中,num表示質因子的數量。 void pr(int k) //求k的質因子 { num = 0; for (int i = 2 ;

UVA 12493 Stars (尤拉函式--1~nn互質的個數

大致題意:圓上有偶數n個點,每m個點連起來,最後可以把所有點串聯起來就合法。問有多少個m可以完成串聯,串聯後形狀相同的算重複 n <2^31 思路:可以寫個暴力程式,可以發現只要m與n互質,就可以完成串聯,所以用尤拉函式解決 證明: 設cnt為當第一次達到原點時

1~nx互質的數的個數(6個題、容斥原理)

HDU 4135、POJ 2773、HDU 1695、HDU 2841、ZOJ 2836、HDU 1796 HDU 4135 Co-prime 題意: 求[l,r]與x互質的數的

a~b內n互素的數的個數 容斥原理

題意:給定你一個數n,請你統計出在[a,b]這個區間中和n互質的數的個數。兩個數互質當且僅當他們除了1之外沒有其他的公共因子或者他們最大的公共因子是1。1和任何數是互素的。 輸入:第一行輸入一個整

1~nm互質的數的個數(m>n) 附hdu1695題解(尤拉函式+容斥原理)

int calc(int n,int m) { //求1~n 與m互質的數的個數 int num=getFactors(m); //先將m分解質因數 int sum=0; //先求出不互質的個數,最後用n減去該數 for(int state=1;

組合數學-容斥原理-指定區間內n互素的數的個數

求指定區間內與n互素的數的個數 給出整數n和r。求區間[1,r]中與n互素的數的個數。 去解決它的逆問題,求不與n互素的數的個數。 考慮n的所有素因子pi(i=1···k) 在[1,r]中有多少數能被pi整除呢?它就是   然而,如果我們單純將所有結果,會得到錯誤答案。有些

指定區間內n互素的數的個數 容斥原理

題意:給定整數n和r,求區間[1, r]中與n互素的數的個數。 如果使用暴力的方法,枚舉1...n,判定gcd(i,n)是否為1的復雜度是log(max(i,n)),總的復雜度就是r∗log(ma

容斥原理解決某個區間[1,n]閉區間m互質數數量問題

除法 als tdi pla cin ack 二分 ans || 首先貼出代碼(閉區間[1,n]範圍內和m互質的數) 代碼: int solve(II n,II m){ vector<II>p; for(II i=2;i*i<=m;i++

LightOJ - 1117 Helping Cicada (1~n有多少個數不能被這m個數中任意一個整除)(容斥+狀態壓縮)

vol == show fine cst href main http color 題意:http://www.lightoj.com/volume_showproblem.php?problem=1117 考慮1個數k,1~n有[n/k]個數能被k整除,[a]表示a向下取

快速n!的質因數的個數

font 如果 數組 code -s 組合數 cnblogs 每一個 bsp 一般做組合數的題目都要進行質因數的分解,我們一般是for循環對每個數進行質因數分解,大多數情況都不會超時,但極少數的情況下,題目會不允許這樣的做法,所以我們需要學會一種更快的方法來求質因數。 我

如何數字n的因數個數及因數和

ont 可能 簡單 ack 為我 pan -s span ... 我們有可能在某些數學題中會求到某個數的因數和,那我們怎麽求呢? 因為我們知道任意一個合數都可以由兩個或多個質數相乘得到,那麽我們就先分解質因數吧 例:我們隨便去一個數吧,嗯,就108了,好算。。。 我們

小於n的素數個數

alt AD lean 編程 blog mem logs numbers rime 本文是對 LeetCode Count Primes 解法的探討。 題目: Count the number of prime numbers less than a non-negativ

c語言 n個數的斐波拉契數

斐波拉契數是指一個數組中從第三個起,一個數等於他前兩位數的和,由這樣的有序數列叫斐波拉契數列。例如  //1 2 3 5 8 13 21 34 55 89   這就是1-10的斐波拉契數。 而在演算法中如何求得斐波拉契數需要知道最基本的定義,然後再寫演算法。 在斐波拉契數

BZOJ3994:約數個數和(莫比烏斯反演:[1,N]*[1,M]的矩陣的因子個數

Description  設d(x)為x的約數個數,給定N、M,求   Input 輸入檔案包含多組測試資料。 第一行,一個整數T,表示測試資料的組數。 接下來的T行,每行兩個整數N、M。 Ou

演算法之斐波那契數列如何n個值n項和?(Java)

斐波那契數列 指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)。 1.題目 1.1.求斐波那契數