标签:一个 要求 mes UNC stream rgba htm style else
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入在一行中给出一个正整数 N(1)。
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k
的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
630
输出样例:
3 5*6*7
分析:逐个遍历,找到以每一个数字开头最长的子序列,然后跟max比较,如果比max大的话就替换max,并记录开始的数字。这里需要注意的是遍历的从2开始到sqrt(n)+1,因为如果他比根号下的n还要大的话,肯定是不可能连乘等于n的。
#include<iostream> #include<math.h> using namespace std; int main(){ int n; cin>>n; int max=0; int j,len; int m=0; for(int i=2;i<=sqrt(n)+1;i++){//i*i<=n if(n%i==0){ len=n/i;//这里要把n的值存储起来,就是在j遍历完回来的n要不变 for(j=i+1;j<=sqrt(n)+1;j++){ if(len%j==0){ len=len/j; } else{ break; } } if(j-i>max){ max=j-i; m=i; } } } if(max==0){ max=1; m=n; } printf("%d\n",max); for(int i=m;i<m+max-1;i++){ printf("%d*",i); } printf("%d",m+max-1); }
标签:一个 要求 mes UNC stream rgba htm style else
原文地址:https://www.cnblogs.com/Celiachen/p/14835641.html