第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 F-等式
2018-03-30 08:36
399 查看
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制: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)
输出描述:
输出符合该方程要求的解数。示例1
输入
3 1 20180101 1000000000
输出
1 5 181思路:1/x+1/y=1/n,设x=n+a,y=n+b,化简可得n^2=a*b,找出n^2的所有因子,任何整数n都可以表示为 n = p1^e1*p2^e2*..pn^en,其中p1,p2…,pn都为素数,并且n的约数个数为(1+e1)*(1+e2)*…(1+en),所以n^2 = (p1^e1*p2^e2…pn^en)^2 = (p1^2e1)*(p2^2e2)…*(pn^2en),所以因子个数为(1+2e1)*(1+2e2)*…(1+2en),所以可以利用唯一分解定理求出e1 e2…en,由于要满足x <= y所以只需找出a <= b的解的个数即可,设因子乘积为res,x<=y,所以res/2+1。
#include <bits/stdc++.h> using namespace std; const int N = 1005; typedef long long ll; int num ; int main() { int t; cin>>t; while(t--){ int n,cnt=0; memset(num,0,sizeof(num)); cin>>n; for(int i=2;i*i<=n;i++){ if(n%i==0){ while(n%i==0){ num[cnt]++; n/=i; } cnt++; } } if(n!=1){ num[cnt]++; cnt++; } int res=1; for(int i=0;i<cnt;++i) res=res*(num[i]*2+1); printf("%d\n",res/2+1); } }
相关文章推荐
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 F-等式 简单数论题
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 F等式
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 F-等式(因子分解)
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 F 等式(数学)
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--F-等式
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛-F等式(数论)
- 牛客网 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛-强迫症的序列
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 A 跳台阶
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 L 用来作弊的药水 (唯一分解定理 和 哈希+快速幂)
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 D psd面试
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 F 等式 (唯一分解定理)
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 G 旋转矩阵(模拟)
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 D-psd面试(区间dp)
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 (题解)
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 K 密码
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 F 等式【因数分解】
- 【第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛】E题 回旋星空
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 K 密码
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 D psd面试
- 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 F 等式 (唯一分解定理)