zoukankan      html  css  js  c++  java
  • Mysterious Bacteria LightOJ

    题意:

    给出一个数x 求 x = bp  的p的最大值

    解析:

    算术基本定理 分解质因数

    任何一个数x都可以表示为  x == p1a1   *  p2a2  *  ````` * pnan

     即  bp  ==  p1a1   *  p2a2  *  ````` * pnan  == (p1b1 * p2b2 * `````` * pnbn)p

    所以  pmax  == gcd(a1,a2,·····,an);

    如果x是一个负数  则p只能为奇数

    先把x换成正数求出最大p之后 如果x 为负 则不断除2 直至p为奇数

    代码如下:

    #include <iostream>
    #include <cstdio>
    #include <sstream>
    #include <cstring>
    #include <map>
    #include <set>
    #include <vector>
    #include <stack>
    #include <queue>
    #include <algorithm>
    #include <cmath>
    #define MOD 2018
    #define LL long long
    #define ULL unsigned long long
    #define maxn 1000100
    #define Pair pair<int, int>
    #define mem(a, b) memset(a, b, sizeof(a))
    #define _  ios_base::sync_with_stdio(0),cin.tie(0)
    //freopen("1.txt", "r", stdin);
    using namespace std;
    const int LL_INF = 0x7fffffffffffffff,INF = 0x3f3f3f3f;
    int primes[maxn];
    bool vis[maxn];
    int ans = 0;
    LL gcd(LL a, LL b)
    {
        return b==0?a:gcd(b,a%b);
    }
    
    void init()
    {
        mem(vis,0);
        for(int i=2; i<maxn; i++)
            if(!vis[i])
            {
                primes[ans++] = i;
                for(LL j=(LL)i*i; j<maxn; j+=i)
                    vis[j] = 1;
            }
    }
    
    int main()
    {
        init();
        LL n;
        int T, kase = 0;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%lld",&n);
            int flag = 0;
            int res = 0;
            if(n < 0)
                n = -n,flag = 1;
            for(LL i=0; primes[i] * primes[i] <= n && i < ans; i++)
            {
                int cnt2 = 0;
                while(n % primes[i] == 0)
                {
                    n /= primes[i];
                    cnt2++;
                }
                if(cnt2 > 0)
                {
                    if(res == 0)
                        res = cnt2;
                    res = gcd(res, cnt2);
                }
            }
            if(n > 1)
            {
                res = 1;
            }
            if(flag)
            {
                while(res % 2 == 0)
                    res /= 2;
            }
                
            printf("Case %d: %d
    ",++kase,res);
    
    
        }
    
        return 0;
    }
    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    Day10
    Python pyspider 安装与开发
    深入理解ES6之《块级作用域绑定》
    深入理解ES6之《扩展对象》
    这些特效对于学习前端我们很有用
    算法之旅 | 选择排序法
    JavaScript读取剪贴板中的表格生成图片
    深入理解ES6之《ES7》
    深入理解ES6之《用模块封装代码》
    php://input,$_POST,$HTTP_RAW_POST_DATA区别
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/9190087.html
Copyright © 2011-2022 走看看