HDOJ_2754 素数种类统计

没啥好说的,比较简单,就是注意一些特殊的提放就行啦

/* 功能Function Description:     HDOJ_2574

    开发环境Environment:          vc6.0

    技术特点Technique:

    版本Version:

    作者Author:                   jzjz

    日期Date:                     20120813

    备注Notes:

    题目大意是 找出女生编号中,包含素数种类最多的(不是个数),如果两个相同,找出字典数小的,输出名字

 */

#include<stdio.h>

#include<string.h>

int p[10000];

int main()

{

    int T,n,i,j,k,flat,x,sum,t,h,max;

    char s[30],str[30];

    k=0;

    p[0]=2;

    p[1]=3;

    k=2;

    for(i=5;i<35000;i++)

    {

        flat=0;

        for(j=0;p[j]*p[j]<=i;j++) //这是一个加速 算法

        {

            if(i%p[j]==0)

            {

                flat=1;

                break;

            }

        }

        if(flat==0)

            p[k++]=i;

    }

    scanf("%d",&T);

    while(T--)

    {

        scanf("%d",&n);

        max=-1;

        while(n--)

        {

            scanf("%s%d",str,&x);

            sum=0;

            while(x>1)

            {

                for(i=0;i<k;++i)

                    if(x%p[i]==0)

                    {

                        while(x%p[i]==0) //- -,就是这里错了,害的我一直wa

                            x=x/p[i];

                        sum++;

                        break;

                    }

            }

            if(sum>max)

            {

                max=sum;

                strcpy(s,str);

            }

            else if(sum==max)

            {

                if(strcmp(s,str)>0)

                    strcpy(s,str);

            }

        }

        printf("%s\n",s);

    }

    return 0;

}

 

你可能感兴趣的:(素数)