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 ...
随机推荐
- office 365 激活
将以下代码复制到记事本 @echo off title Activate Microsoft Office ALL versions &echo - Microsoft Office Prof ...
- 4.pickling 和unpickling是什么?
pickling 和unpickling是什么? Pickle module accepts any Python object and converts it into a string repre ...
- vue父组件向子组件传对象,不实时更新解决
vue报错:void mutating a prop directly since the value will be overwritten whenever the parent componen ...
- USACO 2.1 海明码 Hamming Codes (模拟+位运算+黑科技__builtin_popcount(n))
题目描述 给出 N,B 和 D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B <= 8),使得两两编码之间至少有 D 个单位 ...
- 一只简单的网络爬虫(基于linux C/C++)————线程相关
爬虫里面采用了多线程的方式处理多个任务,以便支持并发的处理,把主函数那边算一个线程的话,加上一个DNS解析的线程,以及我们可以设置的max_job_num值,最多使用了1+1+max_job_num个 ...
- Lowest Common Ancestor of a Binary Search Tree(树中两个结点的最低公共祖先)
题目描述: Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in ...
- Envoy 基础教程:使用 Unix Domain Socket(UDS) 与上游集群通信
Envoy Proxy 在大多数情况下都是作为 Sidecar 与应用部署在同一网络环境中,每个应用只需要与 Envoy(localhost)交互,不需要知道其他服务的地址.然而这并不是 Envoy ...
- Day_13【IO流】扩展案例2_统计指定项目文件中字符出现的次数
需求分析 统计当前项目下info2.txt文件中, 每个字符出现的个数 文件内容如下: welcome to itheima!!! 最终效果如下: w(1) (2)!(3)t(2)e(3)c(1)a( ...
- qt-n个数组实现排列组合
例如:现在有一批鞋子,其中颜色有[‘白色’,‘黑色’,‘灰色’]:大小有[‘40’,‘41’,‘42’],样式有[‘板鞋’,‘运动’,‘休闲’],要求写一个算法,实现[[‘白色’,‘40’,‘板鞋’] ...
- CF#358 D. Alyona and Strings DP
D. Alyona and Strings 题意 给出两个字符串s,t,让找出最长的k个在s,t不相交的公共子串. 思路 看了好几个题解才搞懂. 代码中有注释 代码 #include<bits/ ...