hdu 2824 The Euler function
6130 단어 function
오라 함수를 계산합니다. 오라 함수 $\phi(x)$는 $x$를 초과하지 않고 $x$와 호환되는 정수의 개수입니다.여기에는 두 가지 해답 방법이 있다.
방법 1:
분명히 오라 함수는 다음과 같은 세 가지 성질이 있다.
1, $\phi(x=p) = p-1$, $x$가 질수일 때, $k\in[1, p-1]$의 $p-1$개수는 모두 $p$와 호환됩니다.
2, $\phi(x=p^n) = p^n - p^ {n-1}$, $x$가 질수의 $n$차방일 때, $p, 2p, 3p,\cdots, p^ {n-1}p$이 $p^ {n-1}$개 이외의 수는 $x$와 상호작용합니다.
3, $\phi (x = ab) =\phi (a)\phi (b) $, $x$가 두 수의 곱셈과 같을 때, 그 오라 함수는 곱셈을 가진다.등식 왼쪽에 $\phi (ab) $개 수의 집합을 만들고, 등식 오른쪽에 $\phi (a)\phi (b) $개 질서 쌍을 만듭니다. 즉, $a$상호작용과 $b$상호작용의 수의 집합에서 각각 질서 쌍을 만듭니다.중국의 잉여 정리에 따르면 이 두 집합이 일일이 대응하는 것을 발견할 수 있다.
따라서 모든 정수 $x$에 대한 오라함의 값은 다음과 같습니다.
\begin{equation}\phi(x =\prod_i^j p_i^{k_i} )=\prod_i^j p_i^{k_i} - p_i^{k_i-1}\end{equation}
그러나 이 방법은 $x$에 대해 질인수분해를 해야 하기 때문에 프로그래밍의 복잡도가 비교적 높다.
방법 2:
$\phi(x=\prod_i^jp_i^{k_i})$를 구하려면 배율 원리를 사용할 수 있습니다.즉,
\begin{equation}\phi(x) =\sum_{S\subset\{p_i,i\in[1,j]\}} (-1)^{|S|}\frac{x}{\prod_{p_i\in S}p_i}\end{equation}
다음과 같이 단순화할 수 있습니다.
\begin{equation}\phi(x) = x\prod_{i = 1}^j(1-\frac{1}{p_i})\end{equation}
모든 항목에서 $1$또는 $-\frac {1} {p_i}$를 선택할 수 있기 때문에, 모두 곱하면 $x$를 얻을 수 있습니다.2식 정의와 같습니다.
이 문제에 대해 먼저 체법을 사용하여 주어진 범위 내의 모든 수의 오라 함수 값을 구하고 화합을 구한다.
코드는 다음과 같습니다.
1 #include <cstdio>
2 #include <cstdlib>
3 #include <iostream>
4 #include <cstring>
5 #define MAXN 3000003
6 using namespace std;
7 int phi[MAXN];
8 void init()
9 {
10 for( int i = 1 ; i < MAXN ; i++ )
11 {
12 phi[i] = i;
13 }
14 for( int i = 2 ; i < MAXN ; i++ )
15 {
16 if( phi[i] == i )
17 {
18 phi[i] = i -1;
19 for( int j = i*2 ; j < MAXN ; j += i )
20 {
21 phi[j] = phi[j]/i*(i-1);
22 }
23 }
24 }
25 }
26 int main(int argc, char *argv[])
27 {
28 int a, b;
29 init();
30 while( scanf("%d%d", &a, &b) != EOF )
31 {
32 long long ans = 0;
33 for( int i = a ; i <= b ; i++ )
34 {
35 ans += phi[i];
36 }
37 cout<<ans<<endl;
38 }
39 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
콜백 함수를 Angular 하위 구성 요소에 전달이 예제는 구성 요소에 함수를 전달하는 것과 관련하여 최근에 직면한 문제를 다룰 것입니다. 국가 목록을 제공하는 콤보 상자 또는 테이블 구성 요소. 지금까지 모든 것이 구성 요소 자체에 캡슐화되었으며 백엔드에 대한 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.