PAT A1096 Consecutive Factors (20分)

前言

传送门

正文


参考题解

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
/* 题意: 求一个数n的所有因数中最长的连续序列,若有多种方案, 输出连续序列中第一个数最小的序列。 思路:遍历2~sqrt(n),求n最多能被多少个连续整数的乘积整除,在此过程中 若出现更长的连续序列,则更新这个序列的一个数以及序列的长度 注意点: 素数相关的题最好都用 long long,避免溢出 */
typedef long long LL; 

int main(){
	LL n;
	cin>>n;
	int front=0,len=0;
	for(LL i=2,j=(int)sqrt(1.0*n);i<=j;i++){
		LL temp=1,r=i;//temp表示当前连续整数的乘积 
		while(1){
			temp*=r;
			if(n%temp!=0)break;//如果不能整除n,则结束
			if(r-i+1>len){//发现更长的序列 
				front=i;
				len=r-i+1; 
			}
			r++;//下一个数 
		}
	} 
	if(len==0){
		//说明sqrt(n)内没有解,输出n本身
		printf("1\n%lld",n); 
	} else{
		printf("%lld\n",len);
		printf("%lld",front);
		for(LL i=1;i<len;i++){
			printf("*%lld",front+i);
		}
	}
	return 0;
} 
全部评论

相关推荐

07-09 18:33
门头沟学院 Java
这么逆天每年都有人去???&nbsp;填多益网申就是大型的服从性测试
鲁大牛:辅导员在群里发了这个公司我就申了一下。网申居然要写当场开摄像头写两篇不少于三百字的作文。太逆天了
点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司7个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 12:05
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务