JZYZOJ 1629 找分子

题目描述

给定\(n(2≤n≤10^9)\)值,要求\(x\)、\(y\)均为正整数,且\(x<y\),并且满足\(\frac{1}{x}+\frac{1}{y}=\frac{1}{n}\).编程统计有多少对这样的\(x\)和\(y\)。

输入格式

一个整数n

输出格式

一个整数,表示相应的方法数是多少。

样例输入

6

样例输出

4

思路

先把原方程化简
\(\frac{1}{x}+\frac{1}{y}=\frac{1}{n} \Rightarrow \frac{xy}{x+y} = \frac{1}{n} \Rightarrow xy = nx + ny \Rightarrow xy-nx-ny = 0 \Rightarrow xy - nx -ny + n^2 = n^2 \Rightarrow n^2 = (n-x)(n-y)\)

所以原方程等价于\(n^2 = (n-x)(n-y)\)

令\(a = n-x , b = n-y\)且\(a < b\)

则\(n^2=ab\)

不难发现\(a\)和\(b\)是\(n^2\)的一组因子

如果\(n^2\)有\(k\)个因子,就有\(\frac{k}{2}\)组解,对应了\(\frac{k}{2}\)组\(x\)和\(y\)

我们把\(n\)进行质因数分解得$n=a_{1}^{p_{1}}\times a_{2}^{p_{2}}\times a_{3}^{p_{3}}\times \dots a_{m}^{p_{m}} $

则\(n\)有\(\Pi_{i=1}^{m}(p_{i}+1)\)个因子

同样把\(n^2\)进行质因数分解得$n^{2}=a_{1}^{2p_{1}}\times a_{2}^{2p_{2}}\times a_{3}^{2p_{3}}\times \dots a_{m}^{2p_{m}} $

则\(n^2\)有\(\Pi_{i=1}^{m}(2p_{i}+1)\)个因子

所以\(result =\frac{k}{2}=\frac{1}{2}\Pi_{i=1}^{m}(2p_{i}+1)\)

coding

#include <bits/stdc++.h>
using namespace std;

int n,result = 1;

int main()
{
    cin >> n;
    for(register int i = 2;i * i <= n;i ++)
    {
        if(n % i) continue;
        register int cnt = 0;
        while(n % i == 0) cnt ++, n /= i;
        result *= cnt * 2  + 1;
    }
    if(n > 1) result *= 3;
    result >>= 1;
    cout << result << endl;
    return 0;
}

原文地址:https://www.cnblogs.com/Mark-X/p/11699437.html

时间: 2024-10-18 10:19:50

JZYZOJ 1629 找分子的相关文章

p1629【找分子】

描述 Description  给定n(2≤n≤10^9)值,要求x.y均为正整数,且x<y,并且满足1/x+1/y=1/n.编程统计有多少对这样的x和y. 输入格式 Input Format 一个整数n. 输出格式 Output Format 一个整数,表示相应的方法数是多少. 样例输入 Sample Input 6 样例输出 Sample Output 4 时间限制 Time Limitation 1s 注释 Hint 经典数学题目 来源 Source 经典问题 思路:先用筛法求出50000

UVA 725 Division ( 找出 abcde / fghij = N的形式—— 暴力枚举 )

Division Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Description Write a program that finds and displays all pairs of 5-digit numbers that between them use the digits 0 through 9 once each, such that the first number divide

面向对象时钟类(倒计时),分数计算类

/** * 时钟类 * * @author Administrator * */ public class Clock { private int hour; private int minute; private int second; public Clock() { Calendar cal = Calendar.getInstance(); this.hour = cal.get(Calendar.HOUR_OF_DAY); this.minute = cal.get(Calendar.

POJ 3090

由于是对称的图形只要求一边得出sum:sum=sum*2+1就好了把起点定为原点,建立坐标系,能看到的点与原点连线的斜率是不一样的,也就是说,点(X,Y)K=Y/X(K<1)每一个K要不同:1/2出现了2/4就不能出现,从1开始计算,也就是要找分子与分母不能约分的斜率;想到的就是欧拉函数: #include <iostream> #include <cstdio> #include <algorithm> using namespace std; typedef

华南师大 2017 年 ACM 程序设计竞赛新生初赛题解

华南师大 2017 年 ACM 程序设计竞赛新生初赛题解 华南师范大学第很多届 ACM 程序设计竞赛新生赛(初赛)在 2017 年 11 月 20 日 - 27 日成功举行,共有 146 名同学有效参赛(做出 1 题).进入决赛的资格初定为完成并通过 5 题或以上,决赛时间是 12 月 3 日,地点未定. 题解 被你们虐了千百遍的题目和 OJ 也很累的,也想要休息,所以你们别想了,行行好放过它们,我们来看题解吧... A. 诡异的计数法 Description cgy 太喜欢质数了以至于他计数也

Java练习 SDUT-2253_分数加减法

分数加减法 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 编写一个C程序,实现两个分数的加减法 Input 输入包含多行数据 每行数据是一个字符串,格式是"a/boc/d". 其中a, b, c, d是一个0-9的整数.o是运算符"+"或者"-". 数据以EOF结束 输入数据保证合法 Output 对于输入数据的每一行输出两个分数的运算结果. 注意结果应符合书写习惯

20175126Apollo 20175126《Java程序设计》结队编程项目——四则运算 第一周阶段总结

结队编程项目——四则运算 一.项目需求 自动生成小学四则运算题目(加.减.乘.除)统计正确率 支持整数 支持多运算符(比如生成包含100个运算符的题目) 支持真分数 需求分析: 生成四则运算:需要使用随机数生成,需要创造一个能实现计算功能的类. 支持多运算符:运算符也需要利用随机生成,并且不限个数. 支持真分数:需要用到生成分子.分母的函数,将分数化简等. 统计正确率:需要设置一个计算变量,并需要用一个判断正确的函数. 二.设计思路 首先根据需求分析,进行大体的设计: 生成题目→输入答案→判断正

Class热替换与卸载

概述 名词解释:所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用.本文主要是分析Tomcat中关于热部署和JSP更新替换的原理,在此之前先介绍class的热替换和class的卸载的原理. Class热替换 ClassLoader中重要方法: loadClass:ClassLoader.loadClass(…) 是ClassLoader的入口点.当一个类没有指明用什么加载器加载的时候,JVM默认采用AppClassLoader加载器加载没有加载过的class,调用的方法的入口就是

PostgreSQL中查找最大连续性字段

一.建表 lihao=#create table tb (id int,pid int,name varchar); lihao=#INSERT INTO tb VALUES (1, 0, '广东省'); lihao=#INSERT INTO tb VALUES (2, 0, '浙江省'); lihao=#INSERT INTO tb VALUES (3, 2, '衢州市'); lihao=#INSERT INTO tb VALUES (4, 2, '杭州市'); lihao=#INSERT I