zoukankan      html  css  js  c++  java
  • 天梯赛 L1-006 连续因子 (模拟)

    一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为356*7,其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

    输入格式:

    输入在一行中给出一个正整数N(1<N<2的31次方)。

    输出格式:

    首先在第1行输出最长连续因子的个数;然后在第2行中按“因子1因子2……*因子k”的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内。

    输入样例:

    630

    输出样例:

    3

    567

    分析:

    根据N的值的取值范围小于等于2的31次方,而这个值介于12的阶乘到13的阶乘之间,所以我们可以得到最大的值应该是12个数连续相乘,又因为1不计算在内,所以最多只要有11为连续因子即可。

    采用暴力的思想,我们让他分别从2、3、4...sqrt(N)开始乘,连着乘11位、10位...1位。

    即连续乘11位时分别为:

    2 3 4 5 6 7 8 9 10 11 12相乘

    3 4 5 6 7 8 9 10 11 12 13相乘

    ...

    连续乘10位时分别为:

    2 3 4 5 6 7 8 9 10 11相乘

    3 4 5 6 7 8 9 10 11 12相乘

    ...

    一直到只有一位相乘时,

    这其中只要找的一个乘积s,使得N%s==0,我呢么即可认为找到了连续因子。因为iwomen这样找的规律就是符合题目上的先从长度最大的开始找,然后相同长度的里面又从开始的因子小的开始。

    为了优化代码,我们可以在每次乘的时候如果当前的乘积已经大于N了,就没有再往下乘的必要了

    代码:

        #include<stdio.h>
        #include<iostream>
        #include<string.h>
        #include<algorithm>
        #include<math.h>
        using namespace std;
        int main()
        {	 
             int N;
        	 scanf("%d",&N);
        	  int n=sqrt(N);
        	  int i,j;
        	  	long long int sum;
        	  for(int len=11;len>=1;len--)//len控制连续因子的个数,由于N范围的限制最多只能到12的阶乘 
        	     {	     	
        			 for( i=2;i<=n;i++)//连续因子不包括1,从2开始乘,最大乘到N开方就肯定够了 
        			 {
        			    sum=1;
        			 	for(  j=i;j<=len-1+i;j++)//从当前的i开始,乘以的个数为len的长度 
        			 	{
        			 		sum*=j;
        			 		if(sum>N)//到这就没有必要往下算了 
        			 		break;
        			 	}
        			 	if(N%sum==0)//当前的sum值是N的一个因子 
        			 	{
        			 		printf("%d
    %d",len,i);
        			 		for(int k=i+1;k<j;k++)
        			 		printf("*%d",k);
        			 		printf("
    ");
        			 		return 0;
        			 	}
        			 } 
        		 } 
        		 printf("1
    %d
    ",N);//质数的情况 
        	return 0;
        }
    
  • 相关阅读:
    Qt5 webview加载本地网页
    pwiz, a model generator
    编译python3
    [转]Centos配置国内yum源
    ubuntu下apt-get update出现hash校验和错误
    《LINUX程序设计 第四版》 阅读笔记:(一)
    [转]https方式使用git保存密码的方式
    用python产生一个好的秘钥
    Ubuntu关闭图形界面
    Numpy中的矩阵计算
  • 原文地址:https://www.cnblogs.com/cmmdc/p/6729680.html
Copyright © 2011-2022 走看看