链接:https://www.nowcoder.com/acm/contest/90/F
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

给定n,求1/x + 1/y = 1/n (x<=y)的解数。(x、y、n均为正整数)

输入描述:

在第一行输入一个正整数T。
接下来有T行,每行输入一个正整数n,请求出符合该方程要求的解数。
(1<=n<=1e9)

输出描述:

输出符合该方程要求的解数。

输入例子:
3
1
20180101
1000000000
输出例子:
1
5
181

-->

示例1

输入

3
1
20180101
1000000000

输出1

5
181
思路:
1/x + 1/y = 1/n -> xn + yn - xy = 0 -> xn + yn - xy + n^2 = n^2 ->(x - n)*(y - n) = n^2 所以问题转化为求n^2的两个因数相乘的种类,
所以要先求出n^2的质因数有哪些,并且n^2 = n*n所以n^2的因数和n的因数相同,且个数为n的两倍。
#include <bits/stdc++.h>
using namespace std;
int num[100]; int main(){
int t;
cin >> t;
while(t--){
memset(num, 0, sizeof(num));
int n, q = 1;
cin >> n;
for(int i = 2; i * i <= n; i++){
if(n % i == 0){
while(n % i == 0){
num[q]++;
n /= i;
}
q++;
}
}
// cout << "q: " << q << endl;
if(n != 1){ //如果上面的for循环条件是 i * i <= n就要这个; 因为我们是从2开始枚举的,对于一个质数,它本身和1构成了一个
num[q]++; //在那个条件下会被pass的,例如 n = 20时;20 -> 10 -> 5,就会被退出,故最后考虑下退出后的n值,即可,并且
//只会是本身,否则n除以他不为1,会在2到sqrt(n)的遍历时发现的。
q++;
}
// cout << "q: " << q << endl;
for(int i = 0; i < q; i++)
num[i] *= 2; //存储n*n因数,相当于两倍的n的因数
int ans = 1;
for(int i = 0; i < q; i++)
ans *= (num[i] + 1); //每个质因数可以出的个数为:0, 1, 2..num[i], 现在分成两部分,一部分来选的话,
//他每个质数可选的个数的乘积即为可选的种类
cout << (ans + 1) / 2 << endl; //由于x,y有大小关系,故满足的情况只有一半,可以相等,加一向上取整
}
return 0;
}

  



27-1/x+1/y=1/n的更多相关文章

  1. C/C++ 笔试题

    /////转自http://blog.csdn.net/suxinpingtao51/article/details/8015147#userconsent# 微软亚洲技术中心的面试题!!! 1.进程 ...

  2. javascript 中的 let 作用域

    let 声明了一个块级域的局部变量,并且可以给它一个初始化值. 语法EDIT let var1 [= value1] [, var2 [= value2]] [, ..., varN [= value ...

  3. LinuxAsm#Chapter10

    Dividing and Conquering Book: Assembly Language step by step Complexity kills programs. Remember to ...

  4. Notes on <Assembly Language step by step>

    By brant-ruan Yeah, I feel very happy When you want to give up, think why you have held on so long. ...

  5. wk_04

    函数 函数是对程序逻辑进行结构化或过程化的一直编程方法.能将整块代码巧妙的隔离成易于管理的小块,把重复代码放到函数中而不是进行大量的拷贝--这样既能节省空间,也有助于保持一致性,因为你只需要改变单个的 ...

  6. python字符类型的一些方法

    python 字符串和字节互转换.bytes(s, encoding = "utf8") str(b, encoding = "utf-8") i.isspac ...

  7. C/C++笔试题(很多)

    微软亚洲技术中心的面试题!!! .进程和线程的差别. 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2 ...

  8. 股票k线

    与上一篇文章相比k线图主要的难点 1.tooltip的定制化显示: 当手指触摸手机屏幕上下拖动可能会手指的事件陷入图表无法进行上下拖动 tooltip:{followMouseMove} follow ...

  9. highstock实现股票分时

    highchart学习网站 www.highcharts.com http://www.hcharts.cn/docs/index.php http://www.hcharts.cn/api/high ...

  10. nginx+keepalived实现nginx双主高可用的负载均衡

    http://kling.blog.51cto.com/3320545/1253474 一.前言: 在互联网上面,网站为用户提供原始的内容访问,同时为用户提供交互操作.提供稳定可靠的服务,可以给用户带 ...

随机推荐

  1. 【.Net】Byte,Stream,File的转换

    引言      文件的传输和读写通常都离不开Byte,Stream,File这个类,这里我简单封装一下,方便使用. 帮助类     public static class FileHelper { / ...

  2. 服务器端使用DeferredResult异步推送技术

    注意1: org.springframework.web.context.request.async.DeferredResult; 是Spring4.0以后的版本才有的,注意Spring版本,然后添 ...

  3. golang的项目结构 相关知识

    ### 项目结构 ``` ├── bin │   ├── login │   └── main ├── pkg │   └── darwin_amd64 │   └── login │   └── a ...

  4. MySQL多种安装方式选择

    1.rpm包安装方式 rpm包的安装方式非常简单,这里以el6平台下的mysql-5.6.34版本为例,首先,要通过上述搜狐镜像地址下载到如下四个MySQL相关软件安装包. a.下载安装包 MySQL ...

  5. mysql分表和分区实际应用简介

    一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘 ...

  6. myeclipse2014中如何安装freeMarker插件(支持ftl语法高亮)

    MyEcplise2014安装Freemarker插件(支持.ftl文件) 1.下载插件:http://sourceforge.net/projects/freemarker-ide/?source= ...

  7. puppeteer

    const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch(); ...

  8. AngularJs出现错误Error: [ng:areq]

    1.没有对应的控制器 2.有控制器但是路径没有配对

  9. EJB到底是什么,真的那么神秘吗?? (转)

    1. 我们不禁要问,什么是"服务集群"?什么是"企业级开发"? 既然说了EJB 是为了"服务集群"和"企业级开发",那么 ...

  10. MySQL自带的性能压力测试工具mysqlslap详解

    使用语法如下:# mysqlslap [options] 常用参数 [options] 详细说明: --auto-generate-sql, -a 自动生成测试表和数据,表示用mysqlslap工具自 ...