PAT甲级1096 Consecutive Factors (20 分)思路
- 题意:给出一个数,求出这个数的一组因子中最长的连续的因子数目,并输出连续因子。
- 思路:一开始想的是双重循环,第二个循环中连续相乘和原数取余,具体实现没有头绪,参考柳诺博客:
- step1:如果这个数在(1,根号n]之间,没有因子使其取余为0.则改数为质数,输出1;
- step2:当这个数非质数时,在(1,根号n]之间肯定有因子,因此我们可以用双重循环去解题。第一重循环i(从2开始)控制此时的连续的数的最小数,第二层循环j控制从i开始之后一直满足连续乘积是n的因子的连乘,记录len=j-i,不断更新len。
- step3:若len=0,输出1,len>0,则输出i—i+len-1。
接下去…思路明白了,跑去写代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int len=0,first=1,temp;
for(int i=2;i<=sqrt(n);i++)
{
int j;
temp=1;
for(j=i;i<=sqrt(n);j++)
{
temp*=j;
if(n%temp!=0)break;
}
if(j-i>len)
{
len=j-i;
first=i;
}
}
if(len==0)
printf("1\n%d\n",n);
else
{
printf("%d\n",len);
for(int i=first;i<first+len;i++)
{
printf("%d",i);
if(i!=first+len-1)
printf("*");
}
}
}