天梯赛L1-006 连续因子题

简单模拟

一个整数分解成连续因子。

输入格式:

输入在一行中给出一个正整数 N

输出格式:

首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。

输入样例:

630
 

输出样例:

3
5*6*7


暴力做,简单的枚举一下,不断更新最大长度
一定要开ll哇!
代码:
 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <string.h>
 5 #include <queue>
 6 #include <map>
 7 #include <math.h>
 8 #include <set>
 9 #include <vector>
10 #include <stack>
11 #define ll long long
12 #define mod 998244353
13 const int maxn=2e5+5;
14 const int nowmi = 0x3f3f3f3f;
15 const int N=1000010;
16 using namespace std;
17 
18 ll isprime(ll x)
19 {
20     if(x==1)
21         return 0;
22     for(ll i=2;i*i<=x;i++)
23         if(x%i==0)
24             return 0;
25     return 1;
26 }
27 int main(){
28 
29     ll n;
30     cin>>n;
31     if(isprime(n))
32     {
33         cout<<1<<endl<<n;
34         return 0;
35     }
36     ll len=0,s,ans;//最大长度,乘积,连续因子的最前边一个 
37     for(ll i=2;i*i<=n;i++){
38         if(n%i==0){
39             s=i;
40             ll j;
41             for(j=i+1;j*j<=n;j++){
42                 s*=j;
43                 if(n%s!=0)
44                     break;
45             }
46             if(j-i>len){//更新长度
47                 len=j-i;
48                 ans=i;
49             }
50         }
51     }
52     cout<<len<<endl;
53     for(ll i=ans;i<=ans+len-1;i++){
54         if(i!=ans)
55             cout<<"*";
56         cout<<i;
57     }
58     return 0;
59 }
 
posted on 2020-03-11 23:39  mmn  阅读(199)  评论(0编辑  收藏  举报