T7316 yyy的最大公约数(者)

题目背景

全场基本暴力

题目描述

输入输出格式

输入格式:

如图

输出格式:

如图

输入输出样例

输入样例#1:

如图

输出样例#1:

如图

说明

如图

这题用到了容斥原理和线性筛的一些东西,

表示没怎么看懂、。。。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<queue>
 7 #include<stack>
 8 #include<cstdlib>
 9 #define lli long long int
10 using namespace std;
11 const int mod = 998244353;
12 const lli maxn=0x7fffff;
13
14 const lli MAXN=10000001;
15 inline void read(lli &n)
16 {
17     char c=‘+‘;lli x=0;bool flag=0;
18     while(c<‘0‘||c>‘9‘){c=getchar();if(c==‘-‘)flag=1;}
19     while(c>=‘0‘&&c<=‘9‘)
20     x=(x<<1)+(x<<3)+c-48,c=getchar();
21     flag==1?n=-x:n=x;
22 }
23 lli n,m;
24 lli ans=0;
25 lli now[MAXN];
26 int main()
27 {
28     read(n);
29     read(m);
30     if(n>m)
31         swap(n,m);
32
33     for(lli i=n;i>=1;i--)
34     {
35         now[i]=1ll*(n/i)*(m/i);
36         for(lli j=i+i;j<=n;j+=i)
37             now[i]-=now[j];
38         ans+=now[i]*i;
39     }
40     printf("%lld",ans%mod);
41     return 0;
42 }
时间: 2024-07-28 14:01:00

T7316 yyy的最大公约数(者)的相关文章

51nod 1179 最大的最大公约数

给出N个正整数,找出N个数两两之间最大公约数的最大值.例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5. Input 第1行:一个数N,表示输入正整数的数量.(2 <= N <= 50000) 第2 - N + 1行:每行1个数,对应输入的正整数.(1 <= S[i] <= 1000000) Output 输出两两之间最大公约数的最大值. Input示例 4 9 15 25 16 Output示例 5 思路:尝试了两种方法,两种

辗转相除法 求最大公约数和最小公倍数

# include<stdio.h> int main() { int a,b,c,x,y; printf("请输入两个正整数,用逗号间隔:"); scanf("%d,%d",&a,&b); x=a; y=b; if (a<b) { c=a; a=b; //要保证 a>b b=c; } while (b!=0) { c=a; a=b; b=c%b; } c=x*y/a; printf("最大公约数为%d,最小公倍数为

求2个数的最小公倍数和最大公约数

1 # -*- coding: UTF-8 -*- 2 3 def gongyueshu(m, n): 4 if n == 0: 5 return m 6 else: 7 return gongyueshu(n, m%n) 8 9 def gongbeishu(m, n): 10 gongyue = gongyueshu(m, n) 11 return (m * n) / gongyue 12 13 gong = gongyueshu(m=18, n=6) 14 print(gong) 15 g

求最大公约数问题

描述 给定两个正整数,求它们的最大公约数. 输入输入一行,包含两个正整数(<1,000,000,000).输出输出一个正整数,即这两个正整数的最大公约数.样例输入 6 9 样例输出 3 提示求最大公约数可以使用辗转相除法:假设a > b > 0,那么a和b的最大公约数等于b和a%b的最大公约数,然后把b和a%b作为新一轮的输入.由于这个过程会一直递减,直到a%b等于0的时候,b的值就是所要求的最大公约数.比如:9和6的最大公约数等于6和9%6=3的最大公约数.由于6%3==0,所以最大公

luoguP1029 最大公约数和最小公倍数问题 [gcd][数论]

题目描述 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数 条件: 1.P,Q是正整数 2.要求P,Q以x0为最大公约数,以y0为最小公倍数. 试求:满足条件的所有可能的两个正整数的个数. 输入输出格式 输入格式: 二个正整数x0,y0 输出格式: 一个数,表示求出满足条件的P,Q的个数 输入输出样例 输入样例#1: 3 60 输出样例#1: 4 说明 P,Q有4种 3 60 15 12 12 15 60 3 先考虑

最大公约数和最小公倍数

输入两个正整数m和n求最大公约数和最小公倍数. #include <stdio.h> int main() { int m, n; printf("请输入你要计算的两个数:"); scanf("%d %d", &m, &n); printf("最大公约数是:"); printf("%d\n", get_max_common_measure(m, n)); printf("最小公倍数是:&q

Bzoj4488 [Jsoi2015]最大公约数

Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 172  Solved: 101 Description 给定一个长度为 N 的正整数序列Ai对于其任意一个连续的子序列 {Al,Al+1...Ar},我们定义其权值W(L,R )为其长度与序列中所有元素的最大公约数的乘积,即W(L,R) = (R-L+1) ∗ gcd (Al..Ar). JYY 希望找出权值最大的子序列. Input 输入一行包含一个正整数 N. 接下来一行,包含 N个正整数,表示

HDU 2504 又见GCD(最大公约数与最小公倍数变形题)

又见GCD Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 18480    Accepted Submission(s): 7708 Problem Description 有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b.若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c. Input 第一行输入一个n

写一个方法,求两个数的最大公约数和最小公倍数。

package homework0702; /* * 最大公约数 利用辗转相除法求解两个正整数的最大公约数 在循环中,只要除数不等于0,用较大的数除以较小的数,将小的一个数作为下一轮循环的大数,取得的余数作为下一轮循环较小的数,如此循环直到较小的数值为0,返回较大的数.即为最大公约数. 辗转相除法(欧几里得算法) 定理:两个整数的最大公约数等于其中较小的那个数和两数的相除余数的最大公约数.最大公约数(greatest common divisor)缩写为gcd. 最小公倍数 最小公倍数 = (a