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;
}
原文地址:https://www.cnblogs.com/zibuyu/p/2635761.html