【PAT甲级】1096 Consecutive Factors (20 分)

题意:

输入一个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 }
保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
原文地址:https://www.cnblogs.com/ldudxy/p/11913693.html