1096. Consecutive Factors (20)

这道题目由于数据很大,所以选用long long类型,算法比较容易想到,但是下面代码一直运算超时,应该改进一些

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
vector<long long> result;
const long long MAX=10000000;
long long factor[MAX],factorLen=1;
void FindConsecutive(long long factor[]);
long long mult(long long& sta,long long& end);
int main(){
	long long n;
	cin>>n;
	for(long long i=2;i<=n;i++){
		if(n%i==0)
			factor[factorLen++]=i;		
	}
	factor[factorLen]='\0';
	FindConsecutive(factor);
	if(result.size()==0){
		result.push_back(factor[1]);//如果没有连续因数,就只能把除了1之外第二大因数压入 
		result.push_back(factor[1]);//要一直保证里面至少有两个数 
	} 	
	vector<long long>::iterator p=result.end();
	p--;//由于数组末尾是'\0',所以向前一步</span>
	long long sec=*p;
	p--;
	long long fir=*p;
	cout<<sec-fir+1<<endl;
	for(long long i=fir;i<sec;i++)
		cout<<i<<'*';
	cout<<sec;
	return 0;
}
long long mult(long long& sta,long long& end){
	long long resulto=1;
	for(long long i=sta;i<=end;i++)
		resulto=resulto*i;
	return resulto;
}
void FindConsecutive(long long factor[]){
	long long longestLen=0;
	for(long long p1=1;p1<=factorLen-1;p1++){
		bool flag=false;	
		long long p2=factorLen-1;//由于数组末尾是'\0',所以向前一步 
		while(p1!=p2){
			if((factor[p1]-factor[p2])==(p1-p2)){//找出最大连续因数 	
				for(long long pTest=p2+1;pTest<=factorLen-1;pTest++){
					if(mult(factor[p1],factor[p2])==factor[pTest]&&p2-p1+1>longestLen){
							longestLen=p2-p1+1;//最长连续因数个数更新 
							result.push_back(factor[p1]);//把满足要求的连续的因数全部压入数组中 
							result.push_back(factor[p2]);
							flag=true;
							break;				
					}				 
				}
			}
			if(flag)//已经找到在当前p1情况下最大的连续因数序列 
				break;
			else
				p2--;	
		}
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值