L1-006. 连续因子

题目地址:https://www.patest.cn/contests/gplt/L1-006

思路:

(0)若没有因子,则为素数,应输出N本身和连续长度1

(1)找到第一个因子i,也即起始点;

(2)被除数n=n/i,i++。连续长度le=1;

(3)如果n还能被i整除,le++,重复(2);不能:保存长度,保存起始点,重新寻找起始点,重复(1)(2)(3),找到,比较长度,更长的则替换原来的长度和起始点,直到寻找到根号N+1。

注意点:需要两个值来储存最大的长度和相应的起始点,在检测连续因子下一个值不满足时,需不需要跳回到起始因子的下一个?????????????

答案是需要的,不然会出现有一个测试点错误。这个测试点的值有什么特点????????

 

 1 #include<stdio.h>
 2 #include<math.h> 
 3 int main()
 4 {
 5     int n,i;
 6     scanf("%d",&n);
 7     int max_length,max_start;
 8     max_length=0,max_start=0;
 9     for(i=2;i<=sqrt(n)+1;i++)
10     {
11         if(n%i==0)     //找到第一个被能被整除的数
12         {
13             int j,nn,start,length;
14             nn=n;
15             start=i;
16             j=i;
17             length=0;
18             while(nn%j==0)
19             {
20                 nn/=j;           //新的被除数 
21                 j++;             //新的除数 
22                 length++;         //长度加一 
23             }
24             if(length>max_length)   //找到更长的连续因子
25             {
26                 max_length=length;
27                 max_start=start;
28             } 
29         } 
30     }
31     if(max_length==0)    //素数;
32     {
33         max_start=n;
34         max_length=1;
35     } 
36     printf("%d\n",max_length);
37     printf("%d",max_start);
38     for(i=max_start+1;i<max_start+max_length;i++)
39         printf("*%d",i);
40     printf("\n");
41     return 0;
42  } 

 

posted @ 2018-01-18 14:08  爱你的笑  阅读(321)  评论(0编辑  收藏  举报