Each input file contains one test case, which gives the integer N (131).
For each test case, print in the first line the maximum number of consecutive factors. Then in the second line, print the smallest sequence of the consecutive factors in the format "factor[1]*factor[2]*...*factor[k]", where the factors are listed in increasing order, and 1 is NOT included.
630
3 5*6*7
#include<iostream> (720)#include<cstdio> #include<math.h> (865)#include<vector> using?namespace?std; int?main(){ ????int?num=0; ????vector<int>myVector; ????int?n,up; ????cin>>n; ????for(int?i=2;i<=sqrt(n);i++){ ????????int?j=i; ????????int?tempN=n; ????????int?tempNum=0; ????????vector<int>tvector; ????????while(tempN%j==0){ ????????????tempNum++; ????????????tempN/=j; ????????????tvector.push_back(j); ????????????j++; ????????} ????????if(tempNum>num){ ????????????num=tempNum; ????????????myVector.clear(); ????????????myVector.assign(tvector.begin(),tvector.end()); ????????} ????} ????if(myVector.empty()){ ????????myVector.push_back(n); ????????num=1; ????} ????printf("%d\n%d",num,myVector[0]); ????for(int?i=1;i<myVector.size();i++){ ????????printf("*%d",myVector[i]); ????} }
package?NiuCode; import?java.io.BufferedReader; import?java.io.IOException; import?java.io.InputStreamReader; import?java.util.ArrayList; import?java.util.List; import?java.util.Scanner; public?class?ConsecutiveFactors?{ ????public?static?void?main(String[]?args)?throws?IOException?{ ????????BufferedReader?bf?=?new?BufferedReader(new?InputStreamReader(System.in)); ????????int?n?=?Integer.parseInt(bf.readLine()); ????????int?k?=?0; ????????List[]?sequences?=?new?List[1001]; ????????for?(int?i?=?2;?i?*?i?<=?n;?i++)?{ ????????????if?(n?%?i?==?0)?{ ????????????????int?temp?=?n; ????????????????int?j?=?i; ????????????????sequences[k]?=?new?ArrayList(); ????????????????sequences[k].add(j); ????????????????temp?/=?j; ????????????????j++; ????????????????while?(temp?%?j?==?0)?{ ????????????????????sequences[k].add(j); ????????????????????temp?/=?j; ????????????????????j?=?j?+?1; ????????????????} ????????????????k++; ????????????} ????????} ????????int?max?=?0; ????????int?mini?=?-1; ????????for?(int?i?=?0;?i?<?k;?i++)?{ ????????????if?(sequences[i].size()?>?max)?{ ????????????????max?=?sequences[i].size(); ????????????????mini?=?i; ????????????} ????????} ????????if?(mini?!=?-1)?{ ????????????System.out.println(max); ????????????ShowArrays(sequences[mini]); ????????}else?{ ????????????System.out.println(1); ????????????System.out.println(n); ????????} ????} ????private?static?void?ShowArrays(List?sequence)?{ ????????StringBuilder?sb?=?new?StringBuilder(); ????????for?(Object?i?:?sequence){ ????????????sb.append(i+"*"); ????????} ????????System.out.println(sb.substring(0,sb.length()-1)); ????} }
#include<stdio.h> #include<math.h> int?main() { int?i,j,k,M,N,max; scanf("%d",&N); for(i=j=2,M=N,max=0;i*i<=N;) { while(j<i&&M%i)M*=j++; M%i?(j++):(M/=i); if(++i-j>max) { max=i-j; k=j; } } max?printf("%d\n%d",max,k):printf("1\n%d",N); for(i=1;i<max;i++)printf("*%d",++k); }
from?math?import?sqrt import?sys for?s?in?sys.stdin: ????s=int(s) ????num=0 ????a=[] ????for?i?in?range(2,int(sqrt(s)+1)): ????????temp=s ????????n=0 ????????t=[] ????????j=0 ????????p=1 ????????while?True: ????????????if?temp%(p*(i+j))==0: ????????????????p*=(i+j) ????????????????t.append(i+j) ????????????????n+=1 ????????????????temp//(p*(i+j)) ????????????????j+=1 ????????????else: ????????????????break ????????if?n>num: ????????????num=n ????????????a=t ????cout='' ????if?num>0: ????????print(num) ????????for?i?in?range(num-1): ????????????cout+=str(a[i]) ????????????cout+='*' ????????cout+=str(a[-1]) ????????print(cout) ????else: ????????print(1) ????????print(s)
//思路:看到樣例輸出為長(zhǎng)度和序列值,很容易想到枚舉起始值,更新記錄長(zhǎng)度。 #include <bits/stdc++.h> using namespace std; typedef long long LL; int main(){ ????LL n; ????scanf("%lld",&n); ????int m=sqrt(n+10),anslen=0,ansstart; ????for(int l=2;l<=m;++l){ ????????LL product=l;int r=l;? ????????while(n%product==0){ ????????????product*=(++r); ????????} ????????if(r-l>anslen) ????????????anslen=r-l,ansstart=l;???????? ????} ????if(anslen==0) printf("%d\n%lld",1,n); ????else{ ????????printf("%d\n",anslen); ????????for(int i=0;i<anslen;++i){ ????????????if(i==0) printf("%d",ansstart+i); ????????????else printf("*%d",ansstart+i); ????????} ????}???? ????return 0; }?
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int limit = (int)Math.sqrt(n); boolean flag = true; int maxlen = -1; int s = 0; for(int i = 2;i<=limit;i++){ if(n%i==0){ flag = false; } int start = i; int len = 0; double temp = n; while(temp%start==0){ len++; temp /= start; start++; } if(len>maxlen){ maxlen = len; s = i; } } if(flag){ System.out.println(1); System.out.println(n); }else{ System.out.println(maxlen); System.out.print(s++); for(int i = 1;i<maxlen;i++,s++) System.out.print("*"+s); System.out.println(); } } }
#include <iostream> #include <vector> #include <cmath> using namespace std; int main() { int N; while (cin >> N) { //初始狀態(tài)假設(shè)為素?cái)?shù) int min_start = N; int max = 1; int start=2; int sqrtn = sqrt(N); for (;start <= sqrtn;++start) {//只需要循環(huán)到sqrt(N),多了沒(méi)必要,否則會(huì)運(yùn)行超時(shí) if (N%start == 0) { //找到每一個(gè)可以被N除盡的start,然后計(jì)算連續(xù)多少個(gè)數(shù)的乘積可以被N整除 int len = 1; int Ncopy = N; Ncopy /= start; while (Ncopy%(++start)==0) {//為了避免計(jì)算乘積越界,我才用了除的方式 Ncopy /= start; ++len; } if (len > max) { max = len; start = start - len;//每次都要重置start,從原起點(diǎn)開(kāi)始 min_start = start; }else if (len == max&&start < min_start) {//不是素?cái)?shù),但是只有一個(gè)數(shù)可以除盡 start = start - len; min_start = start; } } } cout << max << endl; for (int i = 0;i < max-1;++i) { cout << min_start++ << "*"; } cout << min_start << endl; } }
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> using namespace std; int main() { ????int n; ????cin>>n; ????int start_min = n, len_max = 1, start; ????for(start=2;start<=sqrt(n);start++) ????{ ????????if(n%start==0) ????????{ ????????????int len = 1; ????????????int x = n, t = start; ????????????x /= start; ????????????start++; ????????????while(x%start == 0) ????????????{ ????????????????x /= start; ????????????????start++; ????????????????len++; ????????????} ????????????if(len > len_max) ????????????{ ????????????????len_max = len; ????????????????start = t; ????????????????start_min = start; ????????????}else if(len==len_max && start_min>start){ ????????????????start = t; ????????????????start_min = start; ????????????} ????????} ????} ????cout<<len_max<<endl; ????cout<<start_min; ????for(int i=1;i<len_max;i++) ????????cout<<"*"<<start_min+i; ????cout<<endl; ????return 0; }
#include <iostream> #include <cmath> using namespace std; int main(){ ????long long n; ????cin>>n; ????long long sqr=(long long)sqrt(1.0*n); ????long long first=0,len=0; ? ? ? ? ? ? ? //len為最長(zhǎng)連續(xù)整數(shù)的長(zhǎng)度,first是其中第一個(gè) ????for(long long i=2;i<=sqr;i++){ ? ? ? ? //遍歷第一個(gè)整數(shù) ????????long long temp=1,j; ? ? ? ? ? ? ? ?//temp為當(dāng)前連續(xù)整數(shù)的乘積 ????????for(j=i;;j++){ ????????????temp*=j; ????????????if(n%temp!=0) break; ? ? ? ? ? //j不斷加1直到temp不能整除n ????????} ????????if(j-i>len){ ? ? ? ? ? ? ? ? ? ? ? //更新最長(zhǎng)長(zhǎng)度與第一個(gè)整數(shù) ????????????len=j-i; ????????????first=i; ????????} ????} ????if(len==0) cout<<1<<endl<<n; ? ? ? ? ?//根號(hào)n范圍內(nèi)都無(wú)解,只能輸出n本身(素?cái)?shù)) ????else{ ????????cout<<len<<endl; ????????for(long long i=0;i<len;i++){ ????????????cout<<first+i; ????????????if(i<len-1) cout<<"*"; ????????} ????} ????return 0; }
#include <cmath> #include <iostream> using namespace std; int main() { int n; cin >> n; int min_start = n; int max_len = 1; int start; for(start=2; start <= sqrt(n); start++){ if(n % start == 0){ int len = 1; int copy_n = n, copy_start = start; copy_n = copy_n / start; start += 1; while(copy_n % start == 0){ copy_n /= start; start ++; len ++; } if(len > max_len){ max_len = len; start = copy_start; min_start = start; } else if(len == max_len && min_start > start){ start = copy_start; min_start = start; } } } cout << max_len << endl; cout << min_start; for(int i=1; i<max_len; i++) cout << "*" << ++min_start; cout << endl; return 0; }
import?java.io.BufferedReader; import?java.io.IOException; import?java.io.InputStreamReader; public?class?Main?{ ????static?BufferedReader?br?=?new?BufferedReader(new?InputStreamReader(System.in)); ????public?static?void?main(String[]?args)?{ ????????int?N?=?Integer.parseInt(getLine()); ????????int?maxNum?=?0,?maxIndex?=?0; ????????for?(int?i?=?2;?i?<?Math.sqrt(N);?i++)?{ ????????????int?len?=?getLen(N,?i); ????????????if?(maxNum?<?len)?{ ????????????????maxNum?=?len; ????????????????maxIndex?=?i; ????????????} ????????} ????????if?(maxNum?==?0)?System.out.println(1?+?"\n"?+?N); ????????else?{ ????????????System.out.println(maxNum); ????????????for?(int?i?=?0;?i?<?maxNum;?i++)?{ ????????????????if?(i?!=?maxNum?-?1)?System.out.print((maxIndex?+?i)?+?"*"); ????????????????else?System.out.println(maxIndex?+?i); ????????????} ????????} ????} ????static?int?getLen(int?n,?int?x)?{ ????????int?len?=?0; ????????for?(;?n?%?(x?+?len)?==?0;?n?=?n?/?(x?+?len++))?; ????????return?len; ????} ????static?String?getLine()?{ ????????String?line?=?""; ????????try?{ ????????????line?=?br.readLine(); ????????}?catch?(IOException?e)?{ ????????????e.printStackTrace(); ????????} ????????return?line; ????} }
#include<bits/stdc++.h> using?namespace?std; typedef?long?long?LL; int?main(){ ????ios::sync_with_stdio(0); LL?n; cin>>n; LL?m=(LL)sqrt(n*1.0),anslen=0,ansI=0; for(LL?i=2;i<=m;i++){ LL?temp=1,j=i; while(1){ temp*=j; if(n%temp!=0)?break; if(j-i+1>anslen){ ansI=i; anslen=j-i+1; } j++; } } if(!anslen){ cout<<1<<endl<<n; }else{ cout<<anslen<<endl; for(int?i=0;i<anslen;i++){ if(i>0)?cout<<'*'; cout<<ansI+i; } } return?0; }
#include<iostream> #include<math.h> using?namespace?std; //題目求由n的因子構(gòu)成的最長(zhǎng)的連續(xù)串,并且連續(xù)串是最小的;例如630=3*5*6*7?,最長(zhǎng)連續(xù)串就是5*6*7 int?main(){ ????int?i,j,n,sum,loc=1; ????int?max_count=0;//記錄最大連續(xù)長(zhǎng)度 ????cin>>n; ????/* ????我的思路: ????從2~pow(i,2)【pow(i,2)<=n】?中 ????第一次循環(huán)確定連續(xù)串的開(kāi)始位置 ????第二次循環(huán)找滿足條件的連續(xù)串 ?*/ ????for(i=2;i<=sqrt(n)&&pow(i,max_count+1)<=n;i++){ ???? //找到開(kāi)始位置是i的最長(zhǎng)的比之前的max_count還要大的連續(xù)字串 ????????sum=1; ????????//先找到比之前的max_count多一個(gè)的連續(xù)串 ????????for(j=0;j<=max_count;j++){ ????????????sum?=?sum*(i+j); ????????????if(n%sum!=0)?break; ????????} ???????? ????????//找到后,如果后續(xù)很能滿足條件,我接著加 ????????if(j==max_count+1){ ????????????max_count++;?loc=i; ????????????for(;pow(i+j,2)<=n;j++){ ????????????????sum?=?sum*(i+j); ????????????????if(n%sum!=0)?break; ????????????????max_count++; ????????????} ????????????//i?=?j-1; ????????}?? ????} ???? ????if(loc==1){ ????????cout<<"1\n"<<n; ????????//printf("1\n%d",n);? ????????return?0; ????} ???? ????cout<<max_count<<endl<<loc; ????for(i=1;i<max_count;i++) ????????cout<<"*"<<i+loc; }
#include<bits/stdc++.h> using?namespace?std; int?main(){ ????long?long?num,beg; ????cin>>num; ????int?ma=0; ????for(long?long?i=2;i<=(sqrt(num));i++){ ????????int?k=i,now=0,tp=num; ????????while(tp%k==0){ ????????????now++;tp=tp/k;k++; ????????} ????????if(now>ma){ ????????????ma=now;beg=i; ????????} ????} ????if(ma){ ????cout<<ma<<endl; ????for(int?i=beg;i<ma+beg-1;i++) ????????cout<<i<<"*"; ????cout<<ma+beg-1;} ????else{ ????????cout<<1<<endl; ????????cout<<num; ????} }
//dfs絕對(duì)會(huì)超時(shí) //求因子數(shù) //題目要求,先個(gè)數(shù),再大小,因此我從小到大開(kāi)始 //思路:試除法,在得到一個(gè)除數(shù)的時(shí)候,就證明這是至少有一個(gè)因子了,就可以開(kāi)始了,接下來(lái)就要有更多 //?????連續(xù)的因子才行,如果停止了,沒(méi)有連續(xù)的因子了,就更新成最長(zhǎng)的,從小到大保證了一定是最小 //?????的連續(xù)因子。 //為了保證每個(gè)連續(xù)的因子都得到,因此需要兩層循環(huán) #include<iostream> #include<vector> using?namespace?std; int?a[2];??//由于連續(xù),只需要存放頭尾即可,這個(gè)好厲害,看別人的代碼看到的 int?reslen=-1; int?main(){ ????int?n; ????cin>>n; ????for(int?i=2;i<=n/i;i++){ ????????if(n%i==0){ ????????????int?len=0; ????????????int?temp=i; ????????????while(n%temp==0){ ????????????????len++; ????????????????temp*=(i+len); ????????????} ????????????if(reslen<len){ ????????????????reslen=len; ????????????????a[0]=i; ????????????????a[1]=i+len-1; ????????????} ????????} ????} ????if(reslen==-1){ ????????cout<<1<<endl; ????????cout<<n; ????} ????else{ ????????cout<<reslen<<endl; ????????for(int?i=a[0];i<a[1];i++)?cout<<i<<"*"; ????????cout<<a[1]; ????} ???? ????return?0; }
#include<iostream> #include<cmath> #include<algorithm> using?namespace?std; int?N; int?main() { cin>>N; int?maxN?=?sqrt(N); int?tmp?=?1,cnt?=?0,maxcnt?=?0,v=0; for(int?i?=?2;i<maxN;i++) { //找到一個(gè)因子? if(N%i?==?0) { tmp?=?i; cnt?=?1; for(int?j?=?i+1;;j++) { tmp?*=?j; if(N%tmp?==?0) { cnt++; } else?break;//不能被整除,退出循環(huán)? } if(cnt?>?maxcnt) { maxcnt?=?cnt; v?=?i; }? } } //判斷是否是質(zhì)數(shù) if(maxcnt?==?0)?cout<<1<<endl<<N;? else? { cout<<maxcnt<<endl; for(int?i=0;i<maxcnt;i++) { if(i!=maxcnt-1)?cout<<v+i<<"*"; else?cout<<v+i; } } return?0; }
/*??? 題目大意 一個(gè)整數(shù)可能存在很多個(gè)因數(shù)組合,試在所有因數(shù)組合中找出一個(gè)最大的連續(xù)序列。 */ int maxLen=0;?? ?//最大序列長(zhǎng)度 int startPoint;?? ?//答案序列起點(diǎn) int target;?? ? //更新最大長(zhǎng)度以及序列起點(diǎn) void upData(int index){ ?? ?int sum = 1; ?? ?int tmpLen = 0; ?? ?int sub = 0; ?? ?int tmpIndex = index; ?? ?while (true){ ?? ??? ?sum *= tmpIndex; ?? ??? ?if (sum>=target || target %sum != 0) break; ?? ??? ?tmpLen++; ?? ??? ?tmpIndex++; ?? ??? ?if (tmpLen > maxLen) { ?? ??? ??? ?startPoint = index; ?? ??? ??? ?maxLen = tmpLen; ?? ??? ?} ?? ?} ?? ?return; } int main(){ ?? ?cin >> target; ?? ?for (int i = 2; i <= sqrt(target); i++){ ?? ??? ?upData(i); ?? ?} ?? ?if (maxLen == 0) { ?? ??? ?cout << 1 << "\n" << target << endl; ?? ??? ?return 0; ?? ?} ?? ?cout << maxLen << endl; ?? ?for (int i = 0; i < maxLen; i++){ ?? ??? ?cout << startPoint + i; ?? ??? ?if (i != maxLen - 1) cout << "*"; ?? ?} ?? ?cout << endl; ?? ?return 0; } /* 筆記: 第一個(gè)循環(huán)里面,遍歷的最大值到平方根即可,到target/2可能導(dǎo)致超時(shí) 失敗原因記錄: 1.出現(xiàn)長(zhǎng)度相同的狀況:沒(méi)有輸出起點(diǎn)最小的序列組合; 2.長(zhǎng)度為0時(shí):應(yīng)輸出長(zhǎng)度為1,序列為taget本身; */
#include?<cstdio> #include?<vector> #include?<math.h> #include?<algorithm> using?namespace?std; ? ? vector<int>?factor,factorend; ? int?n; ? int?main(){ ????scanf("%d",&n); ????? ????? ????int?k?=?0; ????int?x; ???int?m?=?n; ???? ????int?max?=?0; ????for(int?i?=?1;i?<=?sqrt(n);i++){ ???????? ????????m?=?n; ????????? ????????for(int?x?=?i;x?<=?sqrt(n);x++){ ????????????if(m?%?x?==?0?&&?x?!=?1){ ???????????????m?=?m?/?x; ???????????????factor.push_back(x); ???????????????continue; ?????????????}??else?break; ????????????? ????????} ????????if(max?<?factor.size()){ ?????????????max?=?factor.size(); ?????????????factorend?=?factor; ????????????? ????????} ???????????? ????????factor.clear(); ????} ????? ????if(max?==?0){ ????????factor.push_back(n);; ????????max?=?factor.size(); ????????factorend?=?factor; ????} ???? ????printf("%d\n",max); ????for(int?i?=?0;i?<?factorend.size();i++){ ????????if(i?==?0){ ????????????printf("%d",factorend[i]); ????????} ????????else ????????printf("*%d",factorend[i]); ????} ????? ????? ????return?0; }
#include?<cmath> #include?<iostream> #include?<vector> #include?<algorithm> using?namespace?std; using?LL?=?long?long; int?main(){ ????LL?N; ????cin?>>?N; ????vector<LL>?factors; ????for(int?i?=?2;?i?<=?(int)(sqrt(N)?+?0.5);?i++){ ????????if(N?%?i?==?0){ ????????????factors.push_back(i); ????????????factors.push_back(N?/?i); ????????} ????} ????factors.push_back(N); ????sort(factors.begin(),?factors.end()); ????vector<LL>?ans; ????vector<LL>?cur; ????vector<vector<LL>>?segs; ????for(auto?k?:?factors){ ????????if(cur.empty()){ ????????????cur.push_back(k); ????????????continue; ????????}? ????????if(k?==?cur.back()?+?1){ ????????????cur.push_back(k); ????????}? ????????else{ ????????????segs.push_back(vector<LL>()); ????????????swap(segs.back(),?cur); ????????????cur.push_back(k); ????????} ????} ????segs.push_back(vector<LL>()); ????swap(segs.back(),?cur); ????int?max_len?=?0; ????for(auto&?seg?:?segs){ ????????int?n?=?seg.size(); ????????for(int?i?=?0;?i?<?n;?i++){ ????????????for(int?j?=?i;?j?<?n;?j++){ ????????????????LL?acc?=?1; ????????????????for(int?k?=?i;?k?<=?j;?k++){ ????????????????????acc?*=?seg[k]; ????????????????} ????????????????if(N?%?acc?==?0){ ????????????????????int?len?=?j?-?i?+?1; ????????????????????if(len?>?max_len){ ????????????????????????max_len?=?len; ????????????????????????ans.clear(); ????????????????????????for(int?k?=?i;?k?<=?j;?k++){ ????????????????????????????ans.push_back(seg[k]); ????????????????????????} ????????????????????} ????????????????} ????????????} ????????} ????} ????cout?<<?ans.size()?<<?endl; ????for(int?i?=?0;?i?<?(int)ans.size();?i++){ ????????if(i)?cout?<<?"*"; ????????cout?<<?ans[i]; ????} ????cout?<<?endl; }