POJ 2917 Diophantus of Alexandria ★(数论)
2012-12-28 23:59
267 查看
题目链接:http://poj.org/problem?id=2917
题目大意:给定n,求有多少种1/x + 1/y = 1/n成立(x,y为正整数)
思路:一道很经典的数论题.
我们不妨设x>=y,则x=n+1,n+2,……,n+n.
而y = 1 / (1/n - 1/x) = nx / (x - n).
令k = x - n, 则 1 <= k <= n.则y = n(n+k) / k.
因为n*k = 0(mod k), 所以答案,即y的个数就等于n*n的小于等于n的约数个数.
容易想到n*n的约数中除了n外,大于n的和小于n的是一一对应的,所以设n*n的约数为res,则ans = (res + 1) / 2.
但是因为n*n很大,所以直接求n*n的约数的不切实际的,不过我们是可以通过n的约数个数求n*n的约数个数 ------ n和n*n的素因子是一样的
我们假设n = p1^a1 * p2^a2 * …… * pi^ai,可知n的约数个数 = (a1+1)(a2+2)……(ai+1).
那么n*n = p1^(2*a1) * p2^(2*a2) * …… * pi^(2*ai),即n*n的约数个数 = (2*a1+1)(2*a2+2)……(2*ai+1).
题目大意:给定n,求有多少种1/x + 1/y = 1/n成立(x,y为正整数)
思路:一道很经典的数论题.
我们不妨设x>=y,则x=n+1,n+2,……,n+n.
而y = 1 / (1/n - 1/x) = nx / (x - n).
令k = x - n, 则 1 <= k <= n.则y = n(n+k) / k.
因为n*k = 0(mod k), 所以答案,即y的个数就等于n*n的小于等于n的约数个数.
容易想到n*n的约数中除了n外,大于n的和小于n的是一一对应的,所以设n*n的约数为res,则ans = (res + 1) / 2.
但是因为n*n很大,所以直接求n*n的约数的不切实际的,不过我们是可以通过n的约数个数求n*n的约数个数 ------ n和n*n的素因子是一样的
我们假设n = p1^a1 * p2^a2 * …… * pi^ai,可知n的约数个数 = (a1+1)(a2+2)……(ai+1).
那么n*n = p1^(2*a1) * p2^(2*a2) * …… * pi^(2*ai),即n*n的约数个数 = (2*a1+1)(2*a2+2)……(2*ai+1).
#include #include using namespace std; vector > prime; int solve(int n){ for (int i = 2; i * i <= n; i ++){ int num = 0; while(n % i == 0){ num ++; n /= i; } prime.push_back(make_pair(i, num)); if (n == 1) break; } if (n > 1){ prime.push_back(make_pair(n, 1)); } long long ans = 1; for (int i = 0; i < prime.size(); i ++){ ans *= (2 * prime[i].second + 1); } return (ans + 1)/2; } int main(){ int t, caseo = 1; scanf("%d",&t); while(t --){ int n; prime.clear(); scanf("%d",&n); printf("Scenario #%d:\n", caseo ++); printf("%d\n\n", solve(n)); } return 0; }
相关文章推荐
- [数论]POJ 2917 Diophantus of Alexandria
- POJ 2917 Diophantus of Alexandria ★(数论)
- poj 2917 Diophantus of Alexandria
- poj 2917 Diophantus of Alexandria 因数分解解1/x+1/y=1/n
- POJ-2917 / HDU-1299 Diophantus of Alexandria
- Diophantus of Alexandria HDU - 1299(数论)
- HDU 1299 Diophantus of Alexandria(数论)
- HDU-1299 Diophantus of Alexandria(数论:因子数)
- hdu 1299 Diophantus of Alexandria(数论(因子个数和))
- HDU 1299 Diophantus of Alexandria (数论)
- hdu 1299 Diophantus of Alexandria (数论)
- POJ 1775 Sum of Factorials 数论,基础题
- POJ 2109 Power of Cryptography 数论
- hdu1299-Diophantus of Alexandria(分解素因子)
- HDOJ-1299-Diophantus of Alexandria 解题报告
- HDU 1299 Diophantus of Alexandria
- Hoj 2305 Diophantus of Alexandria
- POJ 2739 Sum of Consecutive Prime Numbers-数论-(连续素数和)
- 2013寒假练习 1050 Diophantus of Alexandria
- HDU 1299 Diophantus of Alexandria