一些定理总结

1.欧拉函数
用来求比n小的互质的数
在这里插入图片描述在这里插入图片描述
模版:

int oula(int n)
{
	int cnt=1;
	for(int i=2;i*i<=n;i++)
	{
		if(n%i==0)
		{
			n/=i;cnt*=i-1;
			while(n%i==0)
				n/=i,cnt*=i;
		}
	}
	if(n>1)
		cnt*=n-1;
	return cnt;
}

例题:POJ2407 Relative
http://poj.org/problem?id=2407

#include<iostream>
#include<cstdio>
#include<string.h>
#include<string>
using namespace std;
#define maxn 1000000000
int oula(int n)
{
	int cnt=1;
	for(int i=2;i*i<=n;i++)
	{
		if(n%i==0)
		{
			n/=i;cnt*=i-1;
			while(n%i==0)
				n/=i,cnt*=i;
		}
	}
	if(n>1)
		cnt*=n-1;
	return cnt;
}

int main()
{
	int n;
	while(scanf("%d",&n))
	{
		if(n==0)
			break;
		printf("%d\n",oula(n));
	}
	return 0;
}
原创文章 65 获赞 3 访问量 2097

猜你喜欢

转载自blog.csdn.net/littlegoldgold/article/details/105151422