6.求最长 的连续因子,思路就是从2找到sqrt(n) 然后取最大的,但是改了半天还是wa了一个点,代码:
#include<bits/stdc++.h> using namespace std; #define LL long long vector<int>p; int main() { LL t; cin>>t; LL v=sqrt(t); LL r=t; LL ans=0,num=0; for(LL i=2;i<=v+1;i++) { num=0; LL cnt=0; t=r; while(1) { if(t%(i+cnt)==0) { t=t/(i+cnt); cnt++; num++; } else { if(num>ans) { ans=num; p.clear(); for(int j=0;j<ans;j++) { p.push_back(j+i); } } break; } } } cout<<ans<<endl; for(int i=0;i<p.size();i++) { if(i==0)cout<<p[i]; else cout<<"*"<<p[i]; } }
然后就知道,我是从2到sqrt(n)的,如果n是个质数那就取不到,所以如果答案没有的话,就是输出他本身,代码:
#include<bits/stdc++.h> using namespace std; #define LL long long vector<int>p; int main() { LL t; cin>>t; LL v=sqrt(t); LL r=t; LL ans=0,num=0; for(LL i=2;i<=v+100000;i++) { num=0; LL cnt=0; t=r; while(1) { if(t%(i+cnt)==0) { t=t/(i+cnt); cnt++; num++; } else { if(num>ans) { ans=num; p.clear(); for(int j=0;j<ans;j++) { p.push_back(j+i); } } break; } } } if(p.size()==0) { cout<<1<<endl; cout<<t<<endl; } else { cout<<ans<<endl; for(int i=0;i<p.size();i++) { if(i==0)cout<<p[i]; else cout<<"*"<<p[i]; } } }