一个正整数 N的因子中可能存在若干连续的数字。例如 630可以分解为 3×5×6×7,其中 5、6、7就是 3个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式
输入在一行中给出一个正整数 N(1 < N < 2^31)。
输出格式
首先在第 1行输出最长连续因子的个数;然后在第 2行中按因子 1× 因子 2×⋯×因子 k的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内。
讲解:因子就是能被n整除的数,630的因子为2、3、5、6、7、9、10、14、15、18、21、30、35、42、45、63、70、90、105、126、210、315.
求一个数的因子:
#include <iostream>
using namespace std;
int main()
{
int N;
cin>>N;
for(int i=2;i<N/2;i++)
{
int x=N%i;
if(x==0)
cout<<i<<" ";
}
}
这个题要注意的是素数没有因子:
#include<iostream>
#include<math.h>
using namespace std;
int main()
{
double n;
int first,count=0,max=0;
cin>>n;
for(int i=2;i<=sqrt(n);i++)
{
int j=i;
count=0;
int n1=n;
while(n1%j==0)
{
count++;
n1=n1/j;
j++;
}
if(count>max)
{
first=i;
max=count;
}
}
if(max>0)//注意素数没有因子
{
cout<<max<<endl;
cout<<first;
for(int i=first+1;i<first+max;i++)
{
cout<<"*";
cout<<i;
}
}
else
{
cout<<"1"<<endl;
cout<<n;
}
}