TBOJ--1316 入门 队形数量求解

本文解析了一道关于整数分解的问题,讨论了如何通过枚举因数计算一个整数能分成多少种非平凡乘积形式,给出了代码示例,并强调了考虑数据范围和时间复杂度。
摘要由CSDN通过智能技术生成

建议在 TBOJ 观看。

在这里插入图片描述

首先,这里,我祝大家 2024 2024 2024 年新年快乐!

祝大家在新的一年里,合家欢乐,自己的事业也能越来越好。

不知道为啥这题通过率这么低(至少我写题解时通过率是 2 11 \displaystyle \frac 2 {11} 112 , 那俩次还是我 A C AC AC 的……)

不扯了,我们看看题目,就是问一个整数 m × n m \times n m×n 他能分成多少种类如 a × b a\times b a×b 的形式。(不包括 m × n m\times n m×n)

那我们来分析一下这道题的简洁题面,这题不就是

一个整数 n n n 能拆分成多少种 n × m n\times m n×m n , m ≠ 1 n,m \ne 1 n,m=1)的形式( a × b a\times b a×b b × a b\times a b×a 算一种情况),我们只需把这个答案算出来,再减 1 1 1 就行了。

那我们直接枚举 n n n 的因数就可以了。注意一下从 2 2 2 开始就行了。

还有一点就是 需要注意一下数据范围, n × m n\times m n×m 的最大值应该差不多是 1 0 14 10^{14} 1014.所以,建议大家开启 l o n g long long l o n g long long

时间复杂度 O ( n × m ) O(\sqrt{n\times m}) O(n×m )

代码如下:

#include<bits/stdc++.h>
using namespace std;
long long n,a,b,ans;
int main(){
	cin>>a>>b;
	n=a*b;
	for(int i=1;i<=sqrt(n);i++){
		if(n%i==0&&i!=a&&i!=b){
			ans++;
		}
	}
	cout<<ans-1;
	return 0;
}

此篇题解如有错误,请私信:

ZKY2506–TBOJ

zhangkeyuan0623–luogu

我们下次再见!

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值