PAT1096Consecutive Factors

来源:互联网 发布:明解c语言 mobi 编辑:程序博客网 时间:2024/06/05 06:12

题目链接:

http://www.nowcoder.com/pat/5/problem/4320

题目大意:

输入一个整数n,求n的连续约数,n%start(start+1)(start+2)…(start+len-1),其中start尽可能的小,len尽可能的大。

分析:

n为int型,12!小于int型取值范围最大值,所以len最大为12。start最小从2开始,1不算。如果len=0的话,说明n是素数。

代码:

#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<stdio.h>#include<stdlib.h>#include<math.h>using namespace std;int getLen(int start,int n){    int i;    for (i = 0; n % (start + i) == 0; ++i)    {        n /= (start + i);    }    return i;}int main(){    int n;    scanf("%d",&n);    int len = 0;    int start = 0;    for (int i = 2; n / i >= i; ++i)    {        int may = getLen(i,n);        if (may > len)        {            len = may;            start = i;        }    }    if (len==0)    {        printf("1\n");        printf("%d\n",n);    }    else    {        int cnt = 1;        printf("%d\n",len);        printf("%d",start);        while (--len)        {            printf("*%d",start+cnt);            cnt++;        }        printf("\n");    }    return 0;}
0 0
原创粉丝点击