标签:
题意:判断一些数里有最大因子的数
水题,省赛即将临近,高效的代码风格需要养成,为了简化代码,以后可能会更多的使用宏定义,但是通常也只是快速拿下第一道水题,涨自信。大部分的代码还是普通的形式,实际上能简化的部分也不太多
1 #include<iostream> 2 #include<cstring> 3 #include<cmath> 4 #include<cstdio> 5 using namespace std; 6 #define for0n for(i=0;i<n;i++) 7 #define for1n for(i=1;i<=n;i++) 8 const int MAXN=25000; 9 int prime[MAXN+1]; 10 void getPrime() 11 { 12 memset(prime,0,sizeof(prime)); 13 for(int i=2;i<=MAXN;i++) 14 { 15 if(!prime[i])prime[++prime[0]]=i; 16 for(int j=1;j<=prime[0]&&prime[j]<=MAXN/i;j++) 17 { 18 prime[prime[j]*i]=1; 19 if(i%prime[j]==0) break; 20 } 21 } 22 } 23 long long factor[100][2]; 24 int fatCnt; 25 int getFactors(long long x) 26 { 27 fatCnt=0; 28 long long tmp=x; 29 for(int i=1;prime[i]<=tmp/prime[i];i++) 30 { 31 factor[fatCnt][1]=0; 32 if(tmp%prime[i]==0) 33 { 34 factor[fatCnt][0]=prime[i]; 35 while(tmp%prime[i]==0) 36 { 37 factor[fatCnt][1]++; 38 tmp/=prime[i]; 39 } 40 fatCnt++; 41 } 42 } 43 if(tmp!=1) 44 { 45 factor[fatCnt][0]=tmp; 46 factor[fatCnt++][1]=1; 47 } 48 return fatCnt; 49 } 50 51 int main() 52 { 53 #ifndef ONLINE_JUDGE 54 freopen("1.in","r",stdin); 55 #endif 56 int t,n,k; 57 int i,j; 58 getPrime(); 59 int flag; 60 while(cin>>n) 61 { 62 int maxx=-9; 63 for0n 64 { 65 cin>>k; 66 getFactors(k); 67 if(maxx<factor[fatCnt-1][0]) 68 { 69 flag=k; 70 maxx=factor[fatCnt-1][0]; 71 } 72 } 73 cout<<flag<<endl; 74 } 75 }
标签:
原文地址:http://www.cnblogs.com/cnblogs321114287/p/4385707.html