亚历山大的丢番图方程 题解

亚历山大的丢番图方程 题解

题目大意

求解方程(frac1x+frac1y=frac1n(xleq y,bleq10^9))的正整数解的个数

解题思路

[frac1x+frac1y=frac1n\ x+y=frac{xy}n\ nx+ny=xy\ xy-nx-ny=0\ (x-n)(y-n)=n^2 ]

只要求一下(n^2)的因子个数即可

代码

#include<cstdio>
using namespace std;
#define N 40005
long long ans,sum;
int vis[N],a[N],T,m;
int main(){
	for(int i=2;i<=4e4;i++){
		if(!vis[i])a[++m]=i;
		for(int j=1;j<=m&&i*a[j]<=4e4;j++){
			vis[i*a[j]]=1;
			if(i%a[j]==0)break;
		}
	}
	scanf("%d",&T);
	for(int n,t=1;t<=T;t++){
		printf("Scenario #%d:
",t);
		scanf("%d",&n);ans=1;
		for(int i=1;i<=m;i++){
			sum=0;
			while(n%a[i]==0){
				n/=a[i];
				sum++;
			}
			ans*=sum*2+1;
		}
		if(n>1)ans*=3ll;
		printf("%lld

",(ans+1)/2);
	}
}
原文地址:https://www.cnblogs.com/CHK666/p/14591495.html