题意:
输入一个int范围内的正整数,输出它最多可以被分解为多少个连续的因子并输出这些因子以*连接。
trick:
测试点5包含N本身是一个素数的数据,此时应当输出1并把N输出。
测试点5包含一个2e9以上的int整数,此时最好把n当作long long 否则以下代码会运行超时。
AAAAAccepted code:
1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 int ans[100007][37]; 5 int main(){ 6 ios::sync_with_stdio(false); 7 cin.tie(NULL); 8 cout.tie(NULL); 9 long long n; 10 cin>>n; 11 long long tamp=0; 12 int num=1; 13 int cnt=0; 14 int mx=0; 15 int pos=0; 16 for(long long j=2;j*j<=n;++j){ 17 tamp=n; 18 for(long long i=j;i*i<=n;++i) 19 if(tamp%i==0){ 20 tamp/=i; 21 ans[num][++cnt]=i; 22 } 23 else 24 break; 25 if(cnt>mx){ 26 mx=cnt; 27 pos=num; 28 } 29 ++num; 30 cnt=0; 31 } 32 if(!mx){ 33 cout<<"1 "<<n; 34 return 0; 35 } 36 else{ 37 cout<<mx<<" "; 38 for(int i=1;i<=mx;++i){ 39 cout<<ans[pos][i]; 40 if(i<mx) 41 cout<<"*"; 42 } 43 } 44 return 0; 45 }