题目大意:

  有一个数n,满足lcm(i,j)==n并且i<=j时,(i,j)有多少种情况?

解题思路:

  n可以表示为:n=p1^x1*p2^x1.....pk^xk。

  假设lcm(a,b) == n;

  a = p1^c1 * p2^c2 ..... pk^ck。

  b = p1^e1 * p2^e2 .... pk^ek。

  xi = max(ci, ei)。

  对于有序数对(a,b),有唯一分解定理知,每一个素因数的幂都决定了一个独一无二的数。

  求(a,b)的种数就可以转化为求(ci,ei)的种数:num = (2*x1+1)*(2*x2+1).....(2*xk+1)。

  因为是有序数对,最后在除于二。

代码:

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std; #define maxn 10000050
char a[maxn];
int b[];
void prime ();//素数筛选
int main ()
{
int t, l = ;
long long n, sum;
prime ();
scanf ("%d", &t);
while (t --)
{
scanf ("%lld", &n);
int i = ;
sum = ;
while (n > && i < )//由于内存有限,筛选的素数有限,所以i大于所筛选出的素数时也应该退出
{
if (n % b[i] == )
{
int j = ;
while (n % b[i] == )
{
n /= b[i];
j ++;
}
sum *= ( * j + );
}
i++;
}
if (n != )//因为筛选出来的素数有限,n!=1的时候,肯定有一个素数并且这个素数只有一个
sum *= ;
printf ("Case %d: %lld\n", l++, (sum+)/);
}
return ;
} void prime ()
{
long long i, j, k;
for (k=,i=; i<maxn; i++)
{
if (!a[i])
{
b[k ++] = i;
for (j=i*i; j<maxn; j+=i)
a[j] = ;
}
}
}

LightOj 1236 Pairs Forming LCM (素数筛选&&唯一分解定理)的更多相关文章

  1. LightOJ 1236 Pairs Forming LCM (LCM 唯一分解定理 + 素数筛选)

    http://lightoj.com/volume_showproblem.php?problem=1236 Pairs Forming LCM Time Limit:2000MS     Memor ...

  2. LightOJ 1236 - Pairs Forming LCM(素因子分解)

    B - Pairs Forming LCM Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu ...

  3. LightOJ - 1236 - Pairs Forming LCM(唯一分解定理)

    链接: https://vjudge.net/problem/LightOJ-1236 题意: Find the result of the following code: long long pai ...

  4. LightOj 1236 - Pairs Forming LCM (分解素因子,LCM )

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1236 题意:给你一个数n,求有多少对(i,  j)满足 LCM(i, j) = n, ...

  5. LightOJ 1236 Pairs Forming LCM 合数分解

    题意:求所有小于等于n的,x,y&&lcm(x,y)==n的个数 分析:因为n是最小公倍数,所以x,y都是n的因子,而且满足这样的因子必须保证互质,由于n=1e14,所以最多大概在2^ ...

  6. LightOJ 1236 Pairs Forming LCM【整数分解】

    题目链接: http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1236 题意: 找与n公倍数为n的个数. 分析: ...

  7. 1236 - Pairs Forming LCM

    1236 - Pairs Forming LCM   Find the result of the following code: long long pairsFormLCM( int n ) {  ...

  8. Light oj 1236 - Pairs Forming LCM (约数的状压思想)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1236 题意很好懂,就是让你求lcm(i , j)的i与j的对数. 可以先预处理1e7以 ...

  9. 1236 - Pairs Forming LCM -- LightOj1236 (LCM)

    http://lightoj.com/volume_showproblem.php?problem=1236 题目大意: 给你一个数n,让你求1到n之间的数(a,b && a<= ...

随机推荐

  1. 学习swift从青铜到王者之swift闭包06

    语法表达式 一般形式:{ (parameters) -> returnType in statements } 这里的参数(parameters),可以是in-out(输入输出参数),但不能设定 ...

  2. 学习swift从青铜到王者之Swift控制语句04

    1 if语句基本用法 if boolean_expression { /* 如果布尔表达式为真将执行的语句 */ } 如果布尔表达式为 true,则 if 语句内的代码块将被执行.如果布尔表达式为 f ...

  3. Bag-of-words模型、TF-IDF模型

    Bag-of-words model (BoW model) 最早出现在NLP和IR(information retrieval)领域. 该模型忽略掉文本的语法和语序, 用一组无序的单词(words) ...

  4. CentOS 6.x Inotify+Rsync

    CentOS 6.x Inotify+Rsync yum -y install lrzsz [root@rsync ~]# mount -t nfs 10.6.100.75:/volume1/pace ...

  5. Linux 编译安装Boost

    linux平台下要编译安装除gcc和gcc-c++之外,还需要两个开发库:bzip2-devel 和python-devel,因此在安装前应该先保证这两个库已经安装: #yum install gcc ...

  6. win64 qt与fortran (codeblocks) 混合编程

    本教程主要解说用fortran生成dll供qt调用(win64) 本教程须要的软件及文件可从以下的连接下载: http://pan.baidu.com/s/1c04jziC fortran我用的软件是 ...

  7. 修改linux环境变量配置文件

    发现error ImportError: dynamic module does not define module export function (PyInit_cv_bridge_boost) ...

  8. STL_算法_最小值和最大值(min_element、max_element)

    C++ Primer 学习中... 简单记录下我的学习过程 (代码为主) min_element.max_element  找最小.最大值. 非常easy没什么大作用 #include<iost ...

  9. iOS开发——高级篇——多线程GCD死锁

    面试题 请问以下代码打印结果: - (void)interview01 { // 以下代码是在主线程执行的 NSLog(@"执行任务1"); dispatch_queue_t qu ...

  10. UPDATE command denied DELETE

    可用磁盘空间不足 支持SELECT information_schema. TABLES