HDU 2574 Hdu Girls' Day
地址:http://acm.hdu.edu.cn/showproblem.php?pid=2574
思路1:素数有关 ,不太懂。。。
思路2:因为 大于 1 << 16 的和数都能用 1 -- 1<<16 之间的素数表示, 不能表示的肯定是 素数了, 所以处理 1-- 1<<16之间的素数就可以了.
不过貌似这题的数据很弱没有大于 1 << 16 的素数.
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 int prime[1000000] = {0}; 5 6 int main() 7 { 8 int T,i,j,n,num,max,k; 9 char name[100],s[100]; 10 prime[0]=prime[1]=1; 11 for(i = 2; i <1000; i++) 12 for(j = i * i; j <1000000; j+= i) 13 prime[j] = 1; 14 scanf("%d",&T); 15 while(T--) 16 { 17 max=-1; 18 scanf("%d",&n); 19 while(n--) 20 { 21 k=0; 22 scanf("%s%d",name,&num); 23 for(i=2;i<=num;++i) 24 { 25 if(prime[i]) 26 continue; 27 if(num%i==0) 28 { 29 ++k; 30 num/=i; 31 } 32 } 33 if(max<k) 34 { 35 max=k; 36 strcpy(s,name); 37 } 38 else if(max&&max==k) 39 { 40 if(strcmp(s,name)>0) 41 strcpy(s,name); 42 } 43 } 44 printf("%s\n",s); 45 } 46 return 0; 47 }