• POJ1365 Prime Land【质因数分解】【素数】【水题】


    题目链接:

    题目大意:
    告诉你一个数的质因数x的全部底数pi和幂ei。输出x-1的质因数的全部底数和幂

    解题思路:
    这道题不难。可是题意特别不好理解。对于我这样的英文渣的人。愣是一个小时没看明确

    关于题意举例说明吧  

    比如 509 1 59 1  

    x = 509^1 * 59^1 = 30031

    x-1 = 30030

    则答案 13 1 11 1 7 1 5 1 3 1 2 1 就是 x-1 = 13^1 * 11^1 * 7^1 * 5^1 *3^1 *2^1 

    = 30031   

    那么直接按着题意暴力解决即可了。

    。。

    。。


    AC代码:

    #include<stdio.h>
    #include<string.h>
    #include<math.h>
    /*
    pow函数说明
    原型:extern float pow(float x, float y);
    使用方法:#include <math.h>
    功能:计算x的y次幂。
    说明:x应大于零,返回幂指数的结果。
    */
    double p[110],e[110];
    int Prime[35000],E[35000];
    
    void IsPrime()
    {
        Prime[0] = Prime[1] = 0;
        for(int i = 2; i <= 35000; i++)
        {
            Prime[i] = 1;
        }
        for(int i = 2; i <= 35000; i++)
        {
            for(int j = i+i; j <= 35000; j+=i)
            {
                Prime[j] = 0;
            }
        }
    }
    int main()
    {
        int count,sign;
        IsPrime();
    //    for(int i = 2; i <= 35000; i++)
    //        if(Prime[i])
    //            printf("%d ",i);
        while(1)
        {
            count = 0,sign = 0;
            memset(p,0,sizeof(p));
            memset(e,0,sizeof(e));
            memset(E,0,sizeof(E));
    
            while(1)
            {
                scanf("%lf",&p[count]);
                if(p[count] == 0)
                {
                    sign = 1;
                     break;
                }
                scanf("%lf",&e[count]);
                count++;
                char c = getchar();
                if(c=='
    ')
                    break;
            }
    
            if(sign == 1)
                break;
    
            double num = 1;
            for(int i = 0; i < count; i++)
                num *= pow(p[i],e[i]);
    
            int sum = (int)num - 1;
    //        printf("%d
    ",sum);
            int flag = 0,pos = 2;
            for(int i = 2; i <= 32767; i++)
            {
                if(sum == 1)
                    break;
                if(Prime[i])
                {
                    while(sum % i == 0)
                    {
                        E[i]++;
                        sum /= i;
                        if(flag == 0)
                        {
                            flag = 1;
                            pos = i;
                        }
                    }
                }
            }
    
            for(int i = 32767; i>= 2; i--)
            {
                if(E[i]!=0 && i!=pos)
                    printf("%d %d ",i,E[i]);
                else if(E[i]!=0 && i==pos)
                {
                    printf("%d %d
    ",i,E[i]);
                    break;
                }
            }
        }
    
        return 0;
    }
    



  • 相关阅读:
    每日总结
    每日总结
    《构建之法》读后感3
    每日博客
    每日博客
    每日博客
    每日博客
    预开发软件书
    每日博客
    每日博客
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7270654.html
Copyright © 2020-2023  润新知