UVA11752 - The Super Powers

链接

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2852

题解

真的是神奇题目
假设一个数分解质因数之后是 ∏ p i q i \prod p_i^{q_i} piqi
如果这个数能被表示成 k k k次幂,那么一定有 k ∣ g c d ( q 1 , q 2 , q 3 . . . ) k|gcd(q_1,q_2,q_3...) kgcd(q1,q2,q3...)
那么只要 g c d ( q 1 , q 2 , . . . ) gcd(q_1,q_2,...) gcd(q1,q2,...)不是质数,这个数就是题目所要求的数
我可以直接枚举 i = g c d ( q 1 , q 2 , q 3 . . . ) i=gcd(q_1,q_2,q_3...) i=gcd(q1,q2,q3...),然后再枚举底数 j i j^i ji
显然 i &lt; 64 i&lt;64 i<64
s e t set set去一下重就好了

代码

//数学题
#include <bits/stdc++.h>
#define ll unsigned long long
#define lim 18446744073709551615ull
using namespace std;
bool isprime(ll x)
{
	ll i;
	for(i=2;i*i<=x;i++)if(x%i==0)return 0;
	return 1;
}
ll fastpow(ll a, ll b)
{
	ll ans=1, t=a;
	for(;b;b>>=1,t*=t)if(b&1)ans*=t;
	return ans;
}
int main()
{
	ll i, j, k;
	set<ll> s;
	set<ll>::iterator it;
	for(i=2;i<=64;i++)
		if(!isprime(i))
		{
			k=pow(2.0,63.99999999999/i);
			for(j=1;j<=k;j++)s.insert(fastpow(j,i));
		}
	for(it=s.begin();it!=s.end();it++)printf("%llu\n",*it);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值