zoukankan      html  css  js  c++  java
  • 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;
    }
    



  • 相关阅读:
    Notes of Daily Scrum Meeting(12.18)
    Notes of Daily Scrum Meeting(12.17)
    Notes of Daily Scrum Meeting(12.16)
    Notes of Daily Scrum Meeting(12.8)
    Notes of Daily Scrum Meeting(12.5)
    Notes of Daily Scrum Meeting(12.3)
    Notes of Daily Scrum Meeting(11.12)
    Linux中profile、bashrc、bash_profile之间的区别和联系
    Linux GCC编译
    mysql 5.7.16 远程连接
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/7270654.html
Copyright © 2011-2022 走看看