# poj1284

## 求原根

#### 代码：

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <ctype.h>
#include <limits.h>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#include <stack>
#include <set>
#include <bitset>
#define CLR(a) memset(a, 0, sizeof(a))
#define REP(i, a, b) for(int i = a;i < b;i++)
#define REP_D(i, a, b) for(int i = a;i <= b;i++)

typedef long long ll;

using namespace std;

const int maxn = 1e5 + 100;
int phi[maxn];
int n;
vector<int> prime;
int vis[maxn];
int key = 1e5;

void getPhi()//欧拉筛
{
CLR(vis);
phi[1] = 0;
REP(i, 2, key)
{
if(!vis[i])
{
prime.push_back(i);
phi[i] = i - 1;
}
for(int j = 0;j < prime.size() && prime[j]*i <= key;j++)
{
int tmp = prime[j]*i;
vis[tmp] = 1;

if(i%prime[j])
{
phi[tmp] = (prime[j]-1)*phi[i];
}
else
{
phi[tmp] = prime[j]*phi[i];
break;
}
}
}
}
void solve()
{
printf("%d\n", phi[n-1]);
}

int main()
{
// freopen("2Bin.txt", "r", stdin);
//freopen("3Bout.txt", "w", stdout);
getPhi();
while(scanf("%d", &n) != EOF)
{
solve();
}
return 0;
}

#### POJ 1284 Primitive Roots （原根，欧拉函数）

2012-02-26 20:56:50

#### poj1284 Primitive Roots（原根，欧拉函数）

2017-02-28 21:51:56

#### poj-1284(欧拉函数+原根)

2017-08-23 09:37:31

#### 【POJ1284】Primitive Roots——欧拉数

2016-04-08 13:10:02

#### [POJ1284] 原根

2017-01-17 15:13:38

#### POJ1284 Primitive Roots

2012-09-27 21:59:06

#### POJ1284 Primitive Roots【原根】

2017-07-27 22:06:34

#### poj1284 Primitive Roots (欧拉函数)

2016-07-31 20:33:57

#### poj1284 Primitive Roots

2016-09-07 16:36:45

#### poj1284（欧拉函数、原根）

2017-09-19 20:16:21