1. 程式人生 > >分解質因數 尤拉函式

分解質因數 尤拉函式

NKOJ3801 分解質因數

問題描述

記Pi表示正整數i的質因數集合。

已知正整數n,求滿足下列條件的有序正整數對(a,b)的數目:

(1)1<=a<=b<=n
(2)t為a,b的最大公約數,Pt是Pn的子集

輸入格式

一個正整數n.

輸出格式

一個正整數,表示合題意的有序正整數對的數目.

樣例輸入 1

6

樣例輸出 1

20

樣例輸入 2

7

樣例輸出 2

19

資料範圍

50%的資料1<=n<=2000;

100%的資料1<=n<=1000000.

1是沒有質因數的,因此1的質因數集合是空集,而空集屬於所有集合。此時顯然可以用尤拉函式來搞。

注意到尤拉函式的計算式:

ϕ(x)=x(11p1)(11p2)(11p3)(11pk)p1,p2pk,x=pa11pa22pa33pakk

尤拉函式函式的本質是容斥原理。那麼將尤拉函式稍加改動,設p是Pn中的元素,那麼我們可以先求出正常的ϕ(x),當p|x時將ϕ(x)乘上pp1得到ϕ(x),即可消除容斥原理的影響。

這樣的話,最終答案就是ni=1ϕ(i)

#include<stdio.h>
#define ll long long
#define MAXN 1000005
int N,E[MAXN]; ll Ans,phi[MAXN],P[MAXN]; void Euler(int x) { int i,j; phi[1]=1; for(i=2;i<=x;i++) { if(!phi[i])phi[i]=i-1,P[++P[0]]=i; for(j=1;j<=P[0]&&i*P[j]<=x;j++) { if(i%P[j]==0) { phi[i*P[j]]=phi[i]*P
[j]; break; } else phi[i*P[j]]=phi[i]*phi[P[j]]; } } } int main() { int i,j; scanf("%d",&N); Euler(N); for(i=1;i<=P[0]&&P[i]<=N;i++)if(N%P[i]==0)E[++E[0]]=P[i]; for(i=1;i<=N;i++) for(j=1;j<=E[0];j++) { if(i%E[j]==0)phi[i]=phi[i]*E[j]/(E[j]-1); } for(i=1;i<=N;i++)Ans+=phi[i]; printf("%lld",Ans); }

相關推薦

分解質因數 函式

NKOJ3801 分解質因數 問題描述 記Pi表示正整數i的質因數集合。 已知正整數n,求滿足下列條件的有序正整數對(a,b)的數目: (1)1<=a<=b<=n (2)t為a,b的最大公約數,Pt是Pn的子

CODE VS 4939 函式 質因數啟發式分解

  /** CODE VS 4939 尤拉函式 質因數啟發式分解 連結:http://codevs.cn/problem/4939/ */ #include<bits/stdc++.h> #define ll long long using namespace st

Pollard的rho啟發式因子分解演算法 & [CodeVS 4939] 函式:Miller-Rabin + Pollard-rho 質因數分解

Pollard的rho啟發式因子分解演算法用於給出整數的一個因子。在一定的合理假設下,如果n有一個因子p,可在O(p√)的期望時間內可找出n的一個因子p。 關於其複雜度,Wikipedia是這樣敘述的: If the pseudo random num

求數論求約數和 與 互質和演算法 (分解質因數函式

Description One day, Qz met an easy problem. But after a 5-hout-long contest in CSU, he became very tired and he wanted to call his girl

phi(大數質因數分解函式)

總結一下此題用的知識。。。 快速加,快速冪,素數判斷(Miller_Rabin),gcd,Pollard_Rho。。。。 這裡就寫一個Pollard_Rho 對於一個大整數n,我們取任意一個數x使得x是n的質因數的機率很小,但如果取兩個數x1以及x2使得它

HDU 1695 GCD 【容斥】【質因數分解】【函式

題意:給定區間[a,b]和[c,d]和k,求出x∈[a,b],y∈[c,d],使得gcd(x,y)==k的個數,給定a=c=1。 分析:對於滿足gcd(x,y)==k的x,y的值,都有x,y是k的倍數,且x,y互質。因此可以將b,d各除以k,得到的新的b,d中找出互質的對

函式( 數論) + 唯一分解定理

尤拉函式 初步認識: 在數論,對正整數n,尤拉函式是小於n的正整數中與n互質的數的數目(φ(1)=1)。此函式以其首名研究者尤拉命名(Euler's totient function),它又稱為Euler's totient function、φ函式、尤拉商數等。 例如φ

bzoj 4802: 函式 大整數分解

題意 求φ(n) n<=1e18 分析 直接用pollard rho對n分解質因數就好了。 程式碼 #include<iostream> #include<

數學 函式相關

尤拉函式相關 1,\(phi(i)\)表示在1到i的數中與i互質的數的個數。 2,\(O(\sqrt{n})\)求\(phi\) ​ 算數基本定理: \[ phi(i)=i*(p_1-1)/p_1*(p_2-1)/p_2*……*(p_k-1)/p_k \] ​ 列舉質因數套公式即可: ​ code:

一類函式相關的求和式推導

\(\\\) 寫在前面 因為最近做了不少和尤拉函式相關的求和問題,而這一類求和的推導有沒有涉及到反演和卷積,所以單獨寫一寫。 給出的題目順序與難度大致無關,是按照個人做題的順序安排的。 再次宣告尤拉函式的定義:\(\varphi(x)\) 表示 \([1,x]\) 裡的所有整數中,與 \(x\)

POJ3090 Visible Lattice Points (數論:函式模板)

題目連結:傳送門 思路:   所有gcd(x, y) = 1的數對都滿足題意,然後還有(1, 0) 和 (0, 1)。 #include <iostream> #include <cstring> using namespace std; const in

[BZOJ4026]dC Loves Number Theory 函式+線段樹

連結 題意:給定長度為 \(n\) 的序列 A,每次求區間 \([l,r]\) 的乘積的尤拉函式 題解 考慮離線怎麼搞,將詢問按右端點排序,然後按順序掃這個序列 對於每個 \(A_i\) ,列舉它的質因數,由於不同的質因數只算一次,所以我們只關心每個質數它最後一次出現的位置,開一棵線段樹維護

hdu5528(積性函式+函式)

題意:設(題目已把f(6)的表給出),,給定n(n<=1e9),求g(n) 最主要的是求f(m),考慮到模數大於0的情況比較多,所以考慮考慮求ij mod n==0的情況。。 然後其實從題目給的表中看出對一個a來說,他0的個數和gcd(a,n)有關,其實也很容易證明,對一個數a來說

函式 線段樹 狀壓 奇數國

讓我們一起來%forever_shi神犇 題意:求區間積的 ϕ \phi ϕ值。 題解:

UVA11426 GCD - Extreme (II) (函式/莫比烏斯反演)

UVA11426 GCD - Extreme (II) 題目描述 PDF 輸入輸出格式 輸入格式: 輸出格式: 輸入輸出樣例 輸入樣例#1: 10 100 200000 0 輸出樣例#1: 67 13015 143295493160 Solution 這道題我用莫比烏斯反演和尤拉函式都寫了一遍,發現

【hdu 5728 PowMod】【數論】【函式】【降冪遞迴取模】【積性函式

【連結】 http://acm.hdu.edu.cn/showproblem.php?pid=5728 【題意】 n是無平方因子的數 定義k=∑mi=1φ(i∗n) mod 1000000007,求K^k^k^k......%p 【思路】 先尤拉性質求出k

函式

尤拉函式 phi[i]表示 1~i 內與 i 互質的個數 通式:phi[i]=x∏(1-pi)  pi表示 i 的質因數 是積性函式 phi[i]*phi[j]=phi[i*j] 做法:一般用尤拉篩 先貼一份程式碼: 1 #include<cstdio>

2015 ICPC瀋陽現場賽 F. Frogs (函式)

題目連結 m個石頭圍成一圈,一群青蛙從0開始跳,第i個青蛙每步跳ai距離,求所有能被跳到的石頭的編號之和。 容易推出石頭x被第i只青蛙跳到的充要條件是,顯然這與下面的命題是等價的: 石頭x被跳到的充要條件是存在一個i,使得。 gcd(x, m)顯然是m的因數,那麼我們就可以列舉m的因

[SDOI2008]沙公主的困惑 線性篩_函式_逆元_快速冪

Code: #include<cstdio> using namespace std; typedef long long ll; const int maxn=10000000+1; long long mod; ll fac[maxn]; ll inv[maxn];

[SDOI2008]儀仗隊 函式

顯然,橫縱座標要互質才能被看到。 處理出與橫座標 i i i 互質的縱座標的個數,求一遍字首和即可。 Co