欧拉函数 指不超过n的且与n互素的正整数的个数
对整数n质因数分解
poj2407
题意就是求裸的欧拉函数的值
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string.h>
#include <string>
#define eps 1e-8
#define op operator
#define MOD 10009
#define MAXN 100100
#define INF 0x7fffffff
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define FOV(i,a,b) for(int i=a;i>=b;i--)
#define REP(i,a,b) for(int i=a;i<b;i++)
#define REV(i,a,b) for(int i=a-1;i>=b;i--)
#define MEM(a,x) memset(a,x,sizeof a)
#define ll __int64
using namespace std;
int phi(int n)
{
int res=n;
for(int i=2;i*i<=n;i++)
{
if(n%i==0)
{
res=res-res/i;
while(n%i==0)
{
n/=i;
}
}
}
if(n>1)
res=res-res/n;
return res;
}
int main()
{
//freopen("ceshi.txt","r",stdin);
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==0) break;
printf("%d\n",phi(n));
}
return 0;
}
求给定素数原根的个数 本题应用到一个结论:p是素数,则有(p-1)的欧拉函数值数个的原根。。这个结论好厉害。。。。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string.h>
#include <string>
#define eps 1e-8
#define op operator
#define MOD 10009
#define MAXN 100100
#define INF 0x7fffffff
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define FOV(i,a,b) for(int i=a;i>=b;i--)
#define REP(i,a,b) for(int i=a;i<b;i++)
#define REV(i,a,b) for(int i=a-1;i>=b;i--)
#define MEM(a,x) memset(a,x,sizeof a)
#define ll __int64
using namespace std;
int main()
{
//freopen("ceshi.txt","r",stdin);
int p;
while(scanf("%d",&p)!=EOF)
{
p--;
int res=p;
for(int i=2;i*i<=p;i++)
if(p%i==0)
{
res=res-res/i;
while(p%i==0)
{
p/=i;
}
}
if(p>1)
res=res-res/p;
printf("%d\n",res);
}
return 0;
}