Hnu 13190 Fractional Lotion(数论)
来源:互联网 发布:查看进程占用端口 编辑:程序博客网 时间:2024/05/27 09:47
题意:
题目给出1/n,求(x,y)满足下面的等式的有多少组。
1/x + 1/y = 1/n
解析:
令 x = n+k
1/(n+k) + 1/y = 1/n
1/y = 1/n - 1/(n+k)
1/y = k/n(n+k)
y = n(n+k) / k
y = n*n/k + n枚举k小于 使得 k能够被 n*n 给整除,问题便转化为求n*n的因子个数, 设n=p1^e1 * p2^e2 * p3^e3 …*pk^ek,则 n*n= p1^(2*e1) p2^(2*e2) …*pk^(2*ek) 。则因子个数sum=(2*e1+1)(2*e2+1)…(2*ek+1); 然后要去除重复的 (sum+1)/2。
AC代码
#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <cstdlib>#include <map>#include <vector>using namespace std;typedef long long ll;const int INF = 0x3f3f3f3f;const int N = 1e3;char num[N];vector<int> prime;int factor[N];bool is_prime(int num) { for(int i = 2; i*i < num; i++) if(num % i == 0) return false; return true;}int init() { prime.clear(); for(int i = 2; i <= 10000; i++) if(is_prime(i)) prime.push_back(i);}int main() { init(); int n; while(scanf("%s", num) != EOF) { int n = atoi(num+2), tot = 0; memset(factor, 0, sizeof(factor)); for(int i = 0; i < prime.size() && n > 1; i++) { if(n % prime[i] == 0) { while(n % prime[i] == 0) { factor[tot]++; n /= prime[i]; } tot++; } } ll ans = 1; for(int i = 0; i < tot; i++) { ans *= (factor[i] * 2 + 1); } printf("%lld\n", (ans+1) / 2); } return 0;}
0 0
- Hnu 13190 Fractional Lotion(数论)
- 分散层叠(Fractional Cascading)
- 分散层叠(Fractional Cascading)
- 线性分式变换(linear fractional transformation)
- 部分储备金体系(Fractional Reserve Banking):通货膨胀的策源地
- fractional cascading
- HNU Cent Savings (DP)
- HNU Digit Sum (状态压缩)
- Hnu 11187 Emoticons :-) (ac自动机+贪心)
- HNU Joke with permutation (深搜dfs)
- 【算法】Fractional Multiscale Processing
- hnu 13028 Attacking rooks(二分图匹配 匈牙利算法)
- hnu 10444 The milliard Vasya's function(母函数)
- hnu 13182 Drop Zone(网络流 最小割)
- HNU 13377 Book Club (最大流 判环)
- HNU 11877
- hnu 病毒
- hnu 12948
- 1081. Rational Sum (20)
- Http协议
- 计算广告学漫谈
- webkit与V8前话
- 1082. Read Number in Chinese (25)
- Hnu 13190 Fractional Lotion(数论)
- AFNetworking数据请求
- Linux音乐电子相册(相册部分)
- 物联12:rfid基本模型
- 1083. List Grades (25)
- hadoop 之旅 - 序言
- 学术休假项目七:大奖赛记分系统
- 解析JSON对象与字符串之间的相互转换
- 在windows8.1 下删除ubuntu