3158. 【JSOI2013】丢番图

这篇博客探讨了如何解决丢番图方程1/x + 1/y = 1/n,通过数学变换和因式分解的方法找到解的数量。作者提供了一个C++代码示例,用于计算给定正整数n时的不同解的数量,并讨论了数据范围和解决方案的效率。
摘要由CSDN通过智能技术生成

Problem

题目传送门

题目描述

丢番图是亚历山大时期埃及著名的数学家。他是最早研究整数系数不定方程的数学家之一。

为了纪念他,这些方程一般被称作丢番图方程。最著名的丢番图方程之一是 x n x^n xn+ y n y^n yn= z n z^n zn。费马提出,对于n≥2, x n x^n xn+ y n y^n yn= z n z^n zn没有正整数解。这被称为“费马大定理”,它的证明直到最近才被安德鲁·怀尔斯(Andrew Wiles)证明。

考虑如下的丢番图方程: 1 x + 1 y = 1 n \frac1x+\frac1y=\frac1n x1+y1=n1 ( x , y , n ∈ N + ) (x,y,n∈N^+) (x,y,nN+)

小G 对下面这个问题十分感兴趣:对于一个给定的正整数n ,有多少种本质不同的解满足该方程?例如n=4,有三种本质不同(x≤y)的解:

1 5 + 1 20 = 1 4 \frac15+\frac1{20}=\frac14 51+201=41

1 6 + 1 12 = 1 4 \frac16+\frac1{12}=\frac14 61+121=41

1 8 + 1 8 = 1 4 \frac18+\frac18=\frac14 81+81=41
  ~  

样例输入

4

样例输出

3

数据范围

对于30%的数据, n≤ 1 0 5 10^5 105
对于50%的数据, n≤ 2 31 2^{31} 231
对于100%的数据,n≤ 1 0 14 10^{14} 1014

Solution

思路

看到这道题目要求求解 1 x \frac1 x x1+ 1 y \frac1 y y1= 1 n \frac1 n n1,直接这么求肯定是不好求的,我们考虑将这个式子变形:
通分得: n x + n y = x y nx+ny=xy nx+ny=xy
移项得: x y − n x − n y = 0 xy-nx-ny=0 xynxny=0
整理,得: x y − n ( x + y ) = 0 xy-n(x+y)=0 xyn(x+y)=0
∵ 等 式 两 边 同 时 加 上 一 个 数 , 等 式 仍 然 成 立 \because等式两边同时加上一个数,等式仍然成立
∴ 配 方 , 得 : x y − n ( x + y ) + n 2 = n 2 \therefore配方,得:xy-n(x+y)+n^2=n^2 xyn(x+y)+n2=n2
用十字相乘法因式分解,得: ( x − n ) ( y − n ) = n 2 (x-n)(y-n)=n^2 (xn)(yn)=n2
由此可以推出,只要(x-n)或者(y-n)中有一个是 n 2 n^2 n2的因数,那么方程就有一组解。
所以,我们只需要求出 n 2 n^2 n2的因数个数,将其除以2向上取正就好了。用数学的语言表述就是:令 d ( x ) d(x) d(x)表示 x x x的因数个数,答案即为 ⌈ d ( n 2 ) 2 ⌉ \lceil\frac{d(n^2)}{2}\rceil 2d(n2)

代码

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int  main()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	long long n;
	cin>>n;
	long long ans=1,t=0;
	for(int i=2;i<=sqrt(n);i++)
	{
		t=0;
		if(n%i==0)
		{
			while(n%i==0)
			{
				n/=i;
				t++;
			}
			ans*=(t*2+1);
		}
		if(n==1)
		{
			break;
		}
	}
	if(n!=1)
	{
		ans*=3;
	}
	cout<<(ans+1)/2;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值