zoukankan      html  css  js  c++  java
  • PTA L1-006 连续因子 (20分)

    L1-006 连续因子 (20分)
     

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

    输入格式:

    输入在一行中给出一个正整数 N(1)。

    输出格式:

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

    输入样例:

    630
    

    输出样例:

    3
    5*6*7

    思路:首先,对于一个数的因数,最大的不会超过他的本身开方,所以我们可以用这个数的本身的开根方作为外循环的边界,如果这个数对循环里的数取余得到的不为0,那么循环里的数不是该数的因数,直接跳过,否则,以其为基数,在此基础上累加,并累乘,去取余和和边界比较,符合条件,继续,否则跳出,跳出后要与y(统计的最长连续因子数)比较,大于的话就更新,最后依次输出就好。其中有一个特殊情况,就是并没有连续的因子序列,这种情况就需要我们特殊的考虑出来了。

     1 #include<iostream>
     2 #include<cmath>
     3 using namespace std;
     4 int main()
     5 {
     6     long long m,n,a,i,j,x,y=-1;
     7     cin>>n;
     8     m=(long long)sqrt(n);
     9     x=n;
    10     for(i=2;i<=m;i++){
    11         if(n%i!=0){
    12             continue;
    13         }
    14         a=1;
    15         for(j=i;j<=m;j++){
    16             if(n%(j*a)!=0||a*j>n){
    17                 break;
    18             }
    19             a*=j;
    20         }
    21         if(j-i>y){
    22             y=j-i;;
    23             x=i;
    24         }
    25     }
    26     if(y==-1){
    27         y=1;
    28     }
    29     cout<<y<<endl;
    30     cout<<x;
    31     for(i=x+1;i<y+x;i++){
    32         cout<<"*"<<i;
    33     }
    34     return 0;
    35 }
  • 相关阅读:
    使用JMeter进行RESTful API测试
    Jmeter中Websocket协议支持包的使用
    JMeterPlugins插件监听器学习-监听器
    Jmeter实现WebSocket协议的接口和性能测试方法
    使用JMeter创建数据库(Mysql)测试
    jmeter --JVM调优设置
    Android 开发者不得不面对的六个问题
    年底盘点之十大开源安全工具
    作为一个程序员怎么通过android开发赚钱
    新手做2D手游该用哪些工具?
  • 原文地址:https://www.cnblogs.com/woju/p/12934336.html
Copyright © 2011-2022 走看看