京东笔试题 求幂

/*
*AC了20%,错误提示是:运行超时 。
*思路:使用了快速幂和取模运算,
*快速幂为了快速求幂,取模运算为了防止溢出 
*仅供参考,没看懂牛客的解题思路,火候不够
*/
#include 
using namespace std;

const int mod = 1000000007;
long long pow(int x, int y)
{
	long long ans = 1;
	while (y>0)
	{
		if (y % 2 == 1)
		{
			ans = ans % mod;
			x = x % mod;
			ans = ans * x;
		}
		x = x % mod;
		x = x * x;
		y = y / 2;
	}
	return ans % mod ;
}

int main()
{
	int n;
	long long cnt = 0;
	scanf ("%d", &n);
	for (int i=1; i<=n; i++)
	{
		for (int j=1; j<=n; j++)
		{
			for (int k=1; k<=n; k++)
			{
				for (int m=1; m<=n; m++)
				{
					if (pow(i,j) == pow(k,m))
						cnt++;
				}
			}	
		}	
	}
	printf ("%d", cnt); 
	return 0;
}

 

你可能感兴趣的:(数据结构与算法)