天梯赛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 }