H - Pairs Forming LCM

2024-03-29 17:32
文章标签 lcm pairs forming

本文主要是介绍H - Pairs Forming LCM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:https://cn.vjudge.net/contest/70017#problem/H

题目大意:给你一个数n,让你在n中找一对a,b两个值且a<b,使得a和b的最大公倍数是n。

题解:唯一分解定理,把每一个a和b分解成以素数为因子的乘积(算数基本定理那样),需要取每一个素数因子的指数最大的那素因子然后相乘,使得到的数为n。

例如a=a1^e1*a2^e2.........ax^ex        b= b1^z1*b2^z2...........bx^zx;       n=n1^y1*n2^y2...........nx^yx;

对于每一个素因子当ei=yi,zi可以选取0到yi的值所以有yi+1中情况,对于zi=yi,e1可以选取0到yi-1所以有yi中情况,所以对于每一个元素来说sum*=(2*yi+1);因为除了a=n,b=n的情况其他符合条件的情况都有2种,因为要选取a<=b的那种,所以最后(sum/2)+1;

代码:

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define inf 0x3f3f3f3fusing namespace std;const int MAX=1e7+5;
int prime[MAX/10];
bool vis[MAX+1];
int k;
void getprime()
{k=0;memset(vis,0,sizeof(vis));for(int i=2;i<=MAX;i++){if(!vis[i]) prime[++k]=i;for(int j=1;j<=k&&prime[j]*i<MAX;j++){vis[prime[j]*i]=1;if(i%prime[j]==0) break;}}
}int main()
{int T,m=0;long long int a,b;scanf("%d",&T);getprime();while(T--){++m;scanf("%lld",&a);long long int ans=1;for(b=1;b<=k&&a>=prime[b]*prime[b];b++){if(a%prime[b]==0){int cnt=0;while(a%prime[b]==0){a=a/prime[b];cnt++;}ans*=(cnt*2+1);}}if(a>1) ans=ans*3;printf("Case %d: %lld\n",m,ans/2+1);}return 0;
}

 

这篇关于H - Pairs Forming LCM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/859202

相关文章

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

[置顶]LCM性质 + 组合数 - HDU 5407 CRB and Candies

CRB and Candies Problem's Link  Mean:  给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...C(n,n))的值,(n<=1e6). analyse: 很有趣的一道数论题! 看了下网上别人的做法,什么Kummer定理我还真没听说过,仔细研究一下那个鬼定理真是涨姿势了! 然而这题我并不是用Kummer那货搞的(w

Codeforces Round #328 (Div. 2)C. The Big Race(数学gcd lcm)

题目连接 题意:比赛时 ,居然理解错题意= =,以为两个人的速度是一样的,然后有个人的只会有一步是w米,另一个人只有一步是b米。。。。 就是一个人每一步是w,一个人每一步是b,终点后是深渊,然后长度是在1–t随机选择一个d作为赛道长度,问不能区分二人胜负的可能。 思路:就是求d%w==d%b = = #include<bits/stdc++.h>using namespace std;

[ARC050C] LCM 111 题解

一句话题解: 转化两个大数的 gcd ⁡ \gcd gcd ,再用迭代的思想求答案。 [ARC050C] LCM 111 题解 题目 题意 给你 a a a , b b b , m m m ,其中 1 ≤ A , B ≤ 1 0 18 , 2 ≤ M ≤ 1 0 9 1\le A,B\le 10^{18},2\le M\le 10^9 1≤A,B≤1018,2≤M≤109 ,让

【lua实战】lua中pairs和ipairs的区别

很久以前,我在使用lua的过程中,对于pairs和ipairs的理解还处于表层,认为我了解的就是全部。 ipairs就是对表中元素进行顺序排序,pairs就是对表中元素进行随机排序。 比如如下例子: local t = {20, "ss", print, 10}print("------ipairs------")for k,v in ipairs(t) doprint(k,v)end

B. Pleasant Pairs

time limit per test 2 seconds memory limit per test 256 megabytes You are given an array a1,a2,…,ana1,a2,…,an consisting of nn distinct integers. Count the number of pairs of indices (i,j)(i,j) su

Leetcode 3267. Count Almost Equal Pairs II

Leetcode 3267. Count Almost Equal Pairs II 1. 解题思路2. 代码实现 题目链接:3267. Count Almost Equal Pairs II 1. 解题思路 这一题同样是题目3265. Count Almost Equal Pairs I的进阶版本。 它主要的区别在于说: 最大的操作次数增加到两次;数组长度增加到最大5000 然后,首

hdu 4497 GCD and LCM(排列组合)

题目:hdu 4497 GCD and LCM 题目大意:给出三个数的最大公约数,和最小公倍数,问这三个数的排列组合关系。 解题思路:最小公倍数/最大公约数 ==  三个数不同部分的乘积。这样来考虑的话,三个数都要有最大公约数的部分,其余的部分就是由LCM / GCD 里面的因子构成。这里面的因子可能会有 2 2 3 这样的情况, 不同的因子之间是不会相互干扰的,但是相同的会出现问

UVA10791 - Minimum Sum LCM(分解质因子)

UVA10791 - Minimum Sum LCM(分解质因子) 题目链接 题目大意:给你一个N,x,y,z..(多个数)的最小公倍数是N,希望这些数的和是最小的,输出这个值(因子数至少是2)。 解题思路:将N质因子分解,这样每个数其实就是每个因子的次数方,这样和一定是最小的,因为不会有可以约掉的数。1的时候要注意一下。还要需要用long long,因为当N =2147483

GCD LCM

GCD(最大公约数) 欧几里得算法(辗转相除法) 原理 if(a%b==0) GCD=b else GCD=b%(a%b) 设 a ≥ b a\ge b a≥b: 若 a m o d b = = 0 a\mod b==0 amodb==0,则 g c d ( a , b ) = = b gcd(a,b)==b gcd(a,b)==b(整除性质); 若 a m o d b ! = 0 a