L1-006 连续因子(没写出来)

L1-006 连续因子

在这里插入图片描述

思路

初看这道题的时候就很懵逼,自己也不会写,就去看了大佬的代码,刚看的时候还不是十分理解。然后自己慢慢想总算想明白了。
1.由输入格式N在0到2^31, 在12和13的阶乘之间,所以连续因子最多为12个数相乘
2.由输出1不算在内,则连续因子的判断从2开始
3.还有一点连续因子第一个数必须要小于 sqrt(n)
4.连续因子相乘后,然后进行判定,若能被整除,则输出,若不能,则进入for循环改变起点,从新进入判定
5.如果输入的数为质数,则直接输出。

源码

#include<stdio.h>
#include<math.h>
int main() {
    int n;
    scanf("%d", &n);
    int max = sqrt(n);
    for(int len = 12; len >= 1; len--) {   //连续因子的个数 
        for(int start = 2; start <= max; start++) {    //连续因子的起点 
            long long int ans = 1;
            for(int i = start; i <= len - 1 + start ; i++)      //连续因子相乘 刚开始从2到13 然后再从3到14 
                ans *= i;
            if(n % ans == 0) {			//进行连续因子的判定,若能被整除,则输出,若不能,则重新进行连续因子的相乘 
                printf("%d\n%d", len, start);
                for(int i = start + 1; i <= len - 1 + start ; i++)
                    printf("*%d", i);
                return 0;
            }
        }
    }
    printf("1\n%d", n);        //若输入的数是质数,则直接输出 
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ღ江晚吟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值