L1-006 连续因子

题目链接 https://pintia.cn/problem-sets/994805046380707840/problems/994805138600869888

1、因子个数不超过sqrt(n)+1

2、如果n为1或质数,那么只有一个因子。所以用一个变量first来记录连乘的第一个因子,若first始终没有改变,则n为1或质数

3、不断构造连乘,如果连乘的积是n的因子,则计算连乘因子的个数是否比已记录的个数多


 

放AC代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     long long n;
 6     cin>>n;
 7     int temp=1;//因子的乘积
 8     int first=0;//记录第一个因子
 9     int len=0;//连续因子的长度
10     int maxn=sqrt(n)+1;
11     for(int i=2; i<=maxn; i++)
12     {
13         int j;
14         temp=1;
15         for(j=i; j<=maxn; j++)
16         {
17             temp*=j;
18             if(n%temp!=0)
19                 break;
20         }
21         if(j-i>len)
22         {
23             len=j-i;
24             first=i;
25         }
26     }
27     if(first==0)
28         cout<<1<<endl<<n;
29     else
30     {
31         cout<<len<<endl;
32         for(int i=0; i<len; i++)
33         {
34             cout<<first+i;
35             if(i!=len-1)
36             cout<<'*';
37         }
38     }
39     return 0;
40 }

 

posted @ 2022-04-18 19:13  爱吃虾滑  阅读(25)  评论(0编辑  收藏  举报