LightOJ1236
题目大意:
给你一个 n,请你找出共有多少对(i,j)满足 lcm(i,j) = n (i<=j) 。
解题思路:
我们利用算术基本定理将 n,i,j 进行分解:
n = P1a1 * P2a2 * ... * Pnan
i = P1b1 * P2b2 * ... * Pnbn
j = P1c1 * P2c2 * ... * Pncn
我们以 P1 项为例。因为 lcm(i,j) = n,故我们不难推知 0<= b1,c1 <=a1,且 b1 和 c1 之中必有一个等于 a1(读者可以试想一下:如果 b1 和 c1 都小于 a1,那么 i 和 j 的最小公倍数分解下来又怎么会有一个 P1a1 呢?)。于是我们不难得出 b1 和 c1 的搭配数为:2*(a1+1) - 1,总对数为:([2*(a1+1) - 1][2*(a2+1) - 1] ... [2*(an+1) - 1] + 1)/2.
Have a good day.
AC代码:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring> using namespace std;
typedef long long ll;
const ll maxn=1e7+;
bool be_prim[maxn];
ll prim[];
int cnt;
void init(){
cnt=;
memset(be_prim,true,sizeof(be_prim));
be_prim[]=be_prim[]=false;
for(ll i=;i<maxn;i++){
if(be_prim[i]){
prim[cnt++]=i;
for(ll j=i*i;j<maxn;j+=i){
be_prim[j]=false;
}
}
}
}
int main()
{
init();
int T, ta;
ll n, ans;
scanf("%d",&T);
for(int t=;t<=T;t++){
ans=;
scanf("%lld",&n);
printf("Case %d: ",t);
for(int i=;i<cnt;i++){
if(n%prim[i]==){
ta=; n/=prim[i];
while(n%prim[i]==){
ta++;
n/=prim[i];
}
ans*=(*(ta+)-);
}
if(n==) break;
}
if(n>) ans*=;
printf("%lld\n",(ans+)/);
}
return ;
}
LightOJ1236的更多相关文章
- LightOJ1236 —— 唯一分解定理 + 最小公倍数
题目链接:https://vjudge.net/problem/LightOJ-1236 1236 - Pairs Forming LCM PDF (English) Statistics Fo ...
- LightOJ-1236 Pairs Forming LCM 唯一分解定理
题目链接:https://cn.vjudge.net/problem/LightOJ-1236 题意 给一整数n,求有多少对a和b(a<=b),使lcm(a, b)=n 注意数据范围n<= ...
- 1236 - Pairs Forming LCM -- LightOj1236 (LCM)
http://lightoj.com/volume_showproblem.php?problem=1236 题目大意: 给你一个数n,让你求1到n之间的数(a,b && a<= ...
- JS高级学习历程-5
[闭包] 定义:闭包就是一个函数 条件:一个函数去嵌套另外一个函数,里边的函数就是闭包 function f1(){ function f2(){ } } 特点:闭包函数有权访问父级环境的变量信息.
- LightOJ - 1236 - Pairs Forming LCM(唯一分解定理)
链接: https://vjudge.net/problem/LightOJ-1236 题意: Find the result of the following code: long long pai ...
随机推荐
- 网络传输 socket
一.Socket语法及相关 前言:osi七层模型: 第七层:应用层. 各种应用程序协议,如HTTP,FTP,SMTP,POP3. 第六层:表示层. 信息的语法语义以及它们的关联,如加密 ...
- 如何把字符串数组从 Swift 传递给 C
作者:Natasha The Robot,原文链接,原文日期:2016-10-27译者:BigbigChai:校对:walkingway:定稿:CMB Swift 允许我们将原生的字符串直接传递给一个 ...
- Waiting for another flutter command to release the startup lock...
2019独角兽企业重金招聘Python工程师标准>>> rm ./flutter/bin/cache/lockfile info from 转载于:https://my.oschin ...
- vuex vue-devtools 安装
vue-devtools是一款基于chrome游览器的插件,用于调试vue应用,这可以极大地提高我们的调试效率.接下来我们就介绍一下vue-devtools的安装 chrome商店直接安装 谷歌访问助 ...
- HDU 4009 Transfer water(最小树形图)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4009 题意:给出一个村庄(x,y,z).每个村庄可以挖井或者修建水渠从其他村庄得到水.挖井有一个代价, ...
- Forrester:开源APM发展势头强劲
在企业的运营团队看来,系统的稳定性和可靠运行时间是至关重要的.因此,企业更乐意向能够负责的技术提供商购买开发完整的.有文档记录的,并且有售后支持的工具或软件. 一般来说,运营团队没有额外精力来应付新奇 ...
- 【Python】Django2.0集成Celery4.1详解
环境准备 Python3.6 pip install Django==2.0.1 pip install celery==4.1.0 pip install eventlet (加入协程支持) 安装e ...
- 复数(complex)
表示复数信息 a = 12.3+4j print('a的类型为:', type(a)) # 运行结果:a的类型为: <class 'complex'> print(a.real) # 实部 ...
- async与await----js的异步处理
async与await----js的异步处理 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 说明 之前写代码遇到一个问题,返回 ...
- 线段树 区间加 gcd 差分 小阳的贝壳
小阳的贝壳 如果线段树要维护区间gcd 这个很简单,但是如果有了区间加,维护gcd 就比较麻烦了. 这个首先可以证明的是 gcd(x,y,z)=gcd(x,y-x,z-y) 这个可以推到 n 个 ...