最小公倍数 (Benefit,UVa 11889)

本文介绍了一个利用质因数分解和最大公约数(GCD)算法解决特定数学问题的C++程序实例。该程序通过筛选法求得指定范围内的所有质数,并利用这些质数来分解目标数值,最终找到满足条件的最小b值。
 1 #include <iostream>
 2 #include <string.h>
 3 #include <string>
 4 #include <fstream>
 5 #include <algorithm>
 6 #include <stdio.h>
 7 #include <vector>
 8 #include <queue>
 9 #include <set>
10 #include <cmath>
11 using namespace std;
12 const double eps = 1e-8;
13 const int INF=0x7fffffff;
14 #define MAXN 10000002
15 typedef long long LL;
16 int vis[MAXN];
17 int prime[700000];
18 
19 void sieve(int n)
20 {
21     int m=(int)sqrt(n+0.5);
22     memset(vis,0,sizeof(vis));
23     for(int i=2;i<=m;i++)if(!vis[i])
24     for(int j=i*i;j<=n;j+=i)vis[j]=1;
25 }
26 
27 int gen_prime(int n)
28 {
29     sieve(n);
30     int c=0;
31     for(int i=2;i<=n;i++)if(!vis[i])
32         prime[c++]=i;
33     return c;
34 }
35 
36 LL gcd(LL a,LL b)
37 {
38     return b==0?a:gcd(b,a%b);
39 }
40 
41 int main()
42 {
43     int T;scanf("%d",&T);
44     LL a,b,c;
45     while(T--)
46     {
47         cin>>a>>c;
48         if(c%a!=0)printf("NO SOLUTION\n");
49         else
50         {
51         b=c/a;
52         LL temp=b;
53         while(temp!=1)
54         {
55             temp=gcd(b,a);
56             b*=temp;
57             a/=temp;
58         }
59         cout<<b<<endl;
60         }
61     }
62     return 0;
63 }

c/a=b/gcd(a,b) 找出a与b/gcd(a,b)所用相同的质因子 乘上b/gcd(a,b)即是最小的b

转载于:https://www.cnblogs.com/TO-Asia/p/3203532.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值