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 }