LightOJ 1236 Pairs Forming LCM(lcm(i, j) = n的对数)
来源:互联网 发布:淘宝买家让卖家加微信 编辑:程序博客网 时间:2024/05/17 23:37
题目链接:
LightOJ 1236 Pairs Forming LCM
题意:
long long pairsFormLCM( int n ) { long long res = 0; for( int i = 1; i <= n; i++ ) for( int j = i; j <= n; j++ ) if( lcm(i, j) == n ) res++; // lcm means least common multiple return res;}
给出n(n <= 1e14),计算res.
分析:
能想到的是将n进行质因子分解,然后就真的不会做了。。。。想了好久,往质因子组合成因子上想,结果组合情况太复杂了。。=_=!
假设n质因子分解为:n = p1^e1 * p2^e2 * p3^e3 * … * pk^ek。对于任意pi的幂ei,当对i,j进行质因数分解后,相应的到的pi的幂为ai和bi,那么一定满足max(ai, bi)=ei.如果ai = ei,那么bi可以取[0, ei],共ei+1种,如果ai < ei,那么bi只取ei,这时ai可以取[0, ei),共ei种。
合起来一共是2*ei+1种。所以对每个质因子这样考虑的话可以得到:ans = ∏(2*ei+1).但是要考虑到i<=j,所以ans = ans / 2,
但是上面的考虑在所有的pi当中ai = ei同时bi = ei只考虑了一次,也就是i=j=n只考虑了一次。所以还要ans = ans + 1.
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <climits>#include <cmath>#include <ctime>#include <cassert>#include <bitset>#define IOS ios_base::sync_with_stdio(0); cin.tie(0);using namespace std;typedef long long ll;const int MAX_N = 10000010;int T, cases = 0, prime_cnt;ll n;ll prime[MAX_N / 10];bitset<MAX_N> bs;void GetPrime(){ prime_cnt = 0; bs.set(); for(int i = 2; i < MAX_N; i++){ if(bs[i] == 1) prime[prime_cnt++] = i; for(int j = 0; j < prime_cnt && i * prime[j] < MAX_N; j++){ bs[i * prime[j]] = 0; if(i % prime[j] == 0) break; } }}ll GetFactor(ll x){ ll res = 1; for(int i = 0; i < prime_cnt && prime[i] * prime[i] <= x; i++){ if(x % prime[i] == 0){ int num = 0; while(x % prime[i] == 0){ num++; x /= prime[i]; } res *= (2 * num + 1); } } if(x > 1){ res *= 3; } return res / 2 + 1;}int main(){ GetPrime(); scanf("%d", &T); while(T--){ scanf("%lld", &n); printf("Case %d: %lld\n", ++cases, GetFactor(n)); } return 0;}
0 0
- LightOJ 1236 Pairs Forming LCM(lcm(i, j) = n的对数)
- lightOJ 1236 Pairs Forming LCM
- LightOJ 1236 Pairs Forming LCM
- LightOJ 1236Pairs Forming LCM
- lightoj 1236 - Pairs Forming LCM
- LightOJ 1236 Pairs Forming LCM
- Pairs Forming LCM LightOJ
- Pairs Forming LCM LightOJ
- LightOJ 1236 Pairs Forming LCM【整数分解】
- LightOJ - 1236 Pairs Forming LCM 合数分解
- LightOJ 1236 - Pairs Forming LCM (LCM·唯一分解)
- LightOJ 1236 Pairs Forming LCM(唯一分解定理)
- LightOJ 1236 Pairs Forming LCM(算术基本定理)
- LightOJ 1236 Pairs Forming LCM(唯一分解定理)
- LightOJ 1236 Pairs Forming LCM (唯一分解定理)
- B - Pairs Forming LCM——(LightOJ 1236)
- lightoj 1236 - Pairs Forming LCM 【唯一分解定理】
- lightOJ 1236 Pairs Forming LCM(算术基本定理)
- Android Gradle 指南
- ServletContext对象【持续更新】
- jquery强化教程2016第1节-编写第一个JQuery程序
- #define st(x) do { x } while (__LINE__ == -1)及“\”分析
- Android Studio怎么用?Android Studio使用教程图文详解
- LightOJ 1236 Pairs Forming LCM(lcm(i, j) = n的对数)
- 算法和结构化数据初识
- Count Color_poj2777_线段树+位运算
- |NOIOJ|二分归并|7622:求排列的逆序数
- 美团Android DEX自动拆包及动态加载简介
- mamp环境下缓存问题
- LightOJ 1234 Harmonic Number(调和级数求和)
- 同程面试经历 android开发工程师
- Fraction to Recurring Decimal