码迷,mamicode.com
首页 > 其他好文 > 详细

Project Euler:Problem 70 Totient permutation

时间:2015-07-17 14:04:42      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:project euler   c++   欧拉函数   

Euler‘s Totient function, φ(n) [sometimes called the phi function], is used to determine the number of positive numbers less than or equal to n which are relatively prime to n. For example, as 1, 2, 4, 5, 7, and 8, are all less than nine and relatively prime to nine, φ(9)=6.
The number 1 is considered to be relatively prime to every positive number, so φ(1)=1.

Interestingly, φ(87109)=79180, and it can be seen that 87109 is a permutation of 79180.

Find the value of n, 1 < n < 107, for which φ(n) is a permutation of n and the ratio n/φ(n) produces a minimum.



#include <iostream>
#include <map>
using namespace std;

int getEuler(int n)
{
	int m = n;
	int p = 2;
	int k = 0;
	while (p*p <= n)
	{
		k = 0;
		while (n%p == 0)
		{
			n /= p;
			k++;
		}
		if (k >= 1)
			m = m / p*(p - 1);
		p++;
	}
	if (n > 1)
		m = m / n*(n - 1);
	return m;
}

map<int, int> getnum(int n)
{
	map<int, int>mp;
	while (n)
	{
		mp[n % 10]++;
		n /= 10;
	}
	return mp;
}

bool isPermutation(int a,int b)
{
	map<int, int>an = getnum(a);
	map<int, int>bn = getnum(b);
	if (an == bn)
		return true;
	else
		return false;
}

int main()
{
	double mine = 10000000.0;
	int num;
	for (int i = 2; i <= 10000000; i++)
	{
		int b = getEuler(i);
		double tmp = i*1.0 / b;
		if (isPermutation(i,b))
		{
			//cout << i << " " << b << endl;
			if (tmp < mine)
			{
				mine = tmp;
				num = i;
			}
		}
	}
	cout << num << " " << mine << endl;
	system("pause");
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

Project Euler:Problem 70 Totient permutation

标签:project euler   c++   欧拉函数   

原文地址:http://blog.csdn.net/youb11/article/details/46925957

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!