欧拉函数(初级)

【欧拉函数(初级)φ函数】

【欧拉函数例题1】

题目来源://http://119.23.110.242/problem/173
【题目描述】
给你一个正整数n,请问有多少个比n小的且与n互质的正整数?
两个整数互质的意思是,这两个整数没有比1大的公约数。
【输入输出格式】
【输入格式】:
一行,一个正整数n(n≤1000000000)。
【输出格式】:
一行,输出比n小的且与n互质的正整数个数。
【输入输出样例】
【输入样例】:
7
【输出样例】:
6
【说明】
128MB,1000ms

【欧拉函数例题1程序】

//#173. 互质
//http://119.23.110.242/problem/173
#include<cmath>
#include<fstream>
#include<iostream>
using namespace std;
int n,ans=1;
void work()
{
	int nx=n;
	for(int i=2;i<sqrt(n);i++)
	{
		int k=0;
		while(!(nx%i))
		{
			nx/=i;
			k++;
		}
		if(k)
		{
			if(k^1)ans*=pow(i,k)-pow(i,k-1);
			else ans*=(i-1);
		}
	}
	if(nx!=1)ans*=(nx-1);
}
int main()
{
	 scanf("%d",&n);
	 work();
	 printf("%d",ans);
	 return 0;
}

【欧拉函数例题2】

题目来源:https://www.luogu.org/problemnew/show/P1592
【题目描述】
输入两个正整数n和k,求与n互质的第k个正整数。
【输入输出格式】
【输入格式】:
仅一行,为两个正整数n(≤106)和k(≤108)。
【输出格式】:
一个正整数,表示与n互质的第k个正整数。
【输入输出样例】
【输入样例】
10 5
【输出样例】
11
【时空限制】
1000ms / 128MB

【欧拉函数例题2程序】

//P1592 互质
//https://www.luogu.org/problemnew/show/P1592
#include<cmath>
#include<fstream>
#include<algorithm>
using namespace std;
int n,k,total;
int num[50000005];
void work()
{
	for(int i=1;i<n;i++)
	{
		if(__gcd(i,n)==1)
		{
			num[++total]=i;
		}
	}
	int sum=k%total;
	if(!sum)sum=total;
	printf("%d",num[sum]+k/total*n);
}
int main()
{
	 scanf("%d%d",&n,&k);
	 work();
	 return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43663538/article/details/86592478