zoukankan      html  css  js  c++  java
  • The Super Powers UVA

    题目大意:将范围从1~pow(2,64)-1内的super power输出。super power的定义:一个数x至少存在两种x=pow(i,k),(k!=1)。

    题解: 注意数据范围2的64次方-1,而long long 的范围是2的63次方-1,所以要用unsigned long long。

    一个数x至少存在两种幂形式,说明这个幂可以拆开,即这个幂不是质数。

    最小非质数(1除外)是4,所以我们只需要枚举2的16次方-1就可以了。

    指数只需要枚举1~64就可以了。如果指数非质数,就放到集合中。

    判溢出:INF=2的64-1,如果当前值ans满足ans>INF/i时,下一步一定会溢出,所以直接跳过就可以了。

    最后把放入set中

    #include<bits/stdc++.h>
    using namespace std;
    typedef unsigned long long ll;
    const int N=65;
    const ll INF=(1<<64)-1;
    bool prime[N];
    set<ll>se;
    bool check(int x)
    {
        int c=sqrt(x+1);
        for(int i=2;i<=c;i++){
            if(x%i==0) return 0;
        }
        return 1;
    }
    int main()
    {
        for(int i=1;i<=64;i++)
            if(check(i)) prime[i]=1;
         for(int i = 2; i <= 65536; i++){
            ll ans = 1;
            for(int j = 1; j <= 64; j++){
                ans *= i;
                if(!prime[j]) se.insert(ans);
                if(ans > INF / i) break;
            }
        }
        se.insert(1);
        set<ll>::iterator  it;
        for(it=se.begin();it!=se.end();it++){
            cout<<*it<<endl;
        }
        return 0;
    }
  • 相关阅读:
    ssh实现免密码登录和文件传输
    linux后台执行程序相关命令
    orchestrator
    curl下载安装与使用
    goland使用
    mysql集群
    consul理解
    my.cnf
    数据库的表设计
    项目常见面试问题
  • 原文地址:https://www.cnblogs.com/Accepting/p/12547507.html
Copyright © 2011-2022 走看看