题解 UVa11752

Posted whx1003

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解 UVa11752相关的知识,希望对你有一定的参考价值。

题目大意 请求出所有小于 (2^{64}-1) 的正整数 (n), 使得 (exists p, q, a, bin mathbb{N+}, p eq q ightarrow a^p=b^q=n)

分析 不难发现,(forall n) 满足条件, (exists rinmathbb{N+} ightarrow n=r^{pq})(pq) 为不超过 (64) 的合数。所以预处理指数,再枚举 (r) 即可。

#include<bits/stdc++.h>
using namespace std;

typedef unsigned long long ull; 
const ull maxnum = ~0ull;

int tot;
ull ans[10000000];
int cnt, prime[70];
bool nprime[70];

void GetPrime(int n)
{
    for(int i = 2; i <= n; ++i) {
        if(!nprime[i]) prime[++cnt] = i;
        for(int j = 1; j <= cnt && i * prime[j] <= n; ++j) {
            nprime[i * prime[j]] = 1;
            if(i % prime[j] == 0) break;
        }
    }
}

int main()
{
    GetPrime(64);
    
    for(ull i = 1; i <= 65536; ++i) {
        ull base = 1;
        for(int j = 1; j <= 64; ++j) {
            if(maxnum / i >= base) {
                base *= i;
                if(nprime[j]) ans[++tot] = base;
            }
        }
    }

    sort(ans + 1, ans + tot + 1);
    tot = unique(ans + 1, ans + tot + 1) - ans - 1;
    
    for(int i = 1; i <= tot; ++i)
        printf("%llu
", ans[i]);
}

以上是关于题解 UVa11752的主要内容,如果未能解决你的问题,请参考以下文章

The Super Powers UVA - 11752

UVa11752

UVA 11752 The Super Powers

The Super Powers UVA - 11752(合数幂)

题解Street Numbers [UVA138]

UVa 307 Sticks 题解