一、题目链接

  https://www.nowcoder.com/acm/contest/90/F

二、题面

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
给定n,求1/x + /y = /n (x<=y)的解数。(x、y、n均为正整数)

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

输出

三、思路

  由$\frac{1}{x} + \frac{1}{y} = \frac{1}{n}$,可推得:$x * n + y * n = x * y$,进一步可推得:$x*y-x*n-y*n+n^2 = n ^ 2$,即:$(x-n)(y-n)=n^2$。

  题目要计算满足$x \le y$的解的个数。那么,从式子$(x-n)(y-n)=n^2$可以看出,$(x-n)(y-n)$相乘为$n^2$,即只要满足$n^2\  \% (x-n) = 0, n^2\  \% (y-n) = 0$就行。也就是,只要$(x-n)$和$(y-n)$为$n^2$的因子且$x \le y$就行了。

  现在要计算$n^2$的因子个数,假设$f(n)$表示$n$的因子个数(下同)。比赛过程中,我尝试过打表,寻找$f(n)$和$f(n^2)$之间的关系,然而没找到。T_T。后来发现了这个公式:http://www.cnblogs.com/565261641-fzh/p/8641852.html。那么,$f(n^2) = f(p_1^{e_1^2} * p_2^{e_2^2} * p_3^{e_3^2} * \cdots * p_k^{e_k^2}) = (1+e_1^2) * (1+e_2^2) * (1+e_3^2) * \cdots * (1 + e_k^2)$。

  另外需要注意的一点是,在分解$n$的质因子时,如果最后$n>1$,结果还需要乘以$(1 + 1 * 2)$即乘以$3$。解释一下,第一个$1$是上面的上述公式里面的;第二个$1$是$n = n^1$指数上的$1$,$2$也是上述公式里面的。

  所求答案即为$\frac{f(n^2) + 1}{2}$。加$1$的原因是因为$n$在计算$f(n^2)$的过程中只算了一次。

四、源代码

  

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

template <class T> inline void read(T &x) {
    int t;
    bool flag = false;
    ')) ;
    ';
     + t - ';
    if(flag) x = -x;
}

vector<int> ps;
];
void init() {
    fill(, );
    ps.clear();
    ] = ] = false;
    ; i < ; ++i) {
        if(is[i]) {
            ; j += i)is[j] = false;
        }
    }
    ; i < ; ++i) {
        if(is[i])ps.push_back(i);
    }
}

LL calc(LL n) {
    LL res = ;
    ;
    ; i * i <= n && idx < ps.size(); ++i) {
        ) {
            ;
            ) {
                cnt++;
                n /= ps[idx];
            }
            res *= ( + cnt * );
        }
        idx++;
    }
    )res *= ;
    return res;
}

int main() {
#ifndef ONLINE_JUDGE
    //freopen("input.txt", "r", stdin);
#endif // ONLINE_JUDGE
    init();
    LL n;
    int T;
    for(scanf("%d", &T); T--;) {
        scanf("%lld", &n);
        printf() / );
    }
    ;
}

第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛-等式(求$N^2$的因子个数)的更多相关文章

  1. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛

    拖了好久了 链接:https://www.nowcoder.com/acm/contest/90/A来源:牛客网 跳台阶 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K, ...

  2. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--L-用来作弊的药水

    链接:https://www.nowcoder.com/acm/contest/90/L 来源:牛客网 1.题目描述 -- 在一个风雨交加的夜晚,来自异世界的不愿透露姓名的TMK同学获得了两种超强药水 ...

  3. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--E-回旋星空

    链接:https://www.nowcoder.com/acm/contest/90/E 来源:牛客网 1.题目描述 曾经有两个来自吉尔尼斯的人(A和C)恋爱了,他们晚上经常在一起看头上的那片名为假的 ...

  4. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--D-psd面试

    链接:https://www.nowcoder.com/acm/contest/90/D 来源:牛客网 1.题目描述 掌握未来命运的女神 psd 师兄在拿了朝田诗乃的 buff 后决定去实习. 埃森哲 ...

  5. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--G-旋转矩阵

    链接:https://www.nowcoder.com/acm/contest/90/G 来源:牛客网 1.题目描述 景驰公司自成立伊始,公司便将“推动智能交通的发展,让人类的出行更安全,更高效,更经 ...

  6. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--A-跳台阶

    链接:https://www.nowcoder.com/acm/contest/90/A 来源:牛客网 1.题目描述 小明在坐景驰科技研发的无人车到达了目的地. 景驰科技(JingChi.ai)是一家 ...

  7. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 G 旋转矩阵 【模拟】

    链接:https://www.nowcoder.com/acm/contest/90/G 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536 ...

  8. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛.B.跳一跳,很简单的(Hash 倍增)

    题目链接 首先变换的周期是\(26\),而所有字符是同时变的,所以一共就只有\(26\)种树,我们对\(26\)棵树分别处理. 求某节点到根路径上的字符串,可以从根往下哈希,\(O(n)\)预处理出. ...

  9. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛----随手记录帖

    这是跟学长学姐组队来打的最爽的一次比赛了,也可能是互相组队最后一次比赛了,南哥和楼学姐,省赛之后就退役了,祝他们能考研和面试都有happy ending! 虽然最后没有把F题的n^2约数的数学题写完, ...

随机推荐

  1. HTML和CSS美化 登入框的页面

    <div id="leftbody"> <p class="p0">如果您感觉您的网站够炫美可以提交给我们!</p> < ...

  2. c++ 计算指定半径圆的面积

    #include <iostream> #define PI 3.14 using namespace std; class Circle { float radius; public: ...

  3. 学习gulpfile.babel.js随笔

    'use strict' import gulp from 'gulp' //将gulp插件包含进来 import sass from 'gulp-sass' //编译sass文件 import im ...

  4. 简述 JPA 与 Spring Data JPA 与 Hibernate

    1.JPA是什么?以及相关概述 JPA的是 Java Persistence API 的简写,是Sun官方提出的一种ORM规范! Sun提出此规范有2个原因: 1.简化现有Java EE和Java S ...

  5. ADSL拨号上网或者光纤上网设置概要(原创)

    不管是在梧州设置光纤还是在太平设置ADSL拨号上网每次设置上网一体机的时候都是遇到各种麻烦...这次又是弄了N久,每次问题各不一样.总结一下操作过程,方便以后又遇问题回头查询自个微博.一.设置电话线的 ...

  6. Educational Codeforces Round 23C

    超级坑的水题!!!想了两天没一点思路,看了题解第一段话就做出来了 刚开始一直在想找到通项就是例如an*10^n+...+a0*10^0-an-...-a0>=s,然后从这个里面找到规律,结果走进 ...

  7. poj1191 棋盘分割。 dp

    连接:http://poj.org/problem?id=1191 思路:额,其实就是直接搞记录一下就可以了. #include <stdio.h> #include <string ...

  8. https ddos检测——研究现状

    from: https://jyx.jyu.fi/bitstream/handle/123456789/52275/1/URN%3ANBN%3Afi%3Ajyu-201612125051.pdf 相关 ...

  9. hashcode()和equals()方法

    (一)hashcode(): 当Set接收一个元素时根据该对象的内存地址算出hashCode,看它属于哪一个区间,再这个区间里调用equeals方法.这里需要注意的是:当俩个对象的hashCode值相 ...

  10. 简单使用dom4j

    package com.dom4j; import java.io.FileWriter; import java.io.IOException; import java.io.Unsupported ...