GCD SUM 强大的数论,容斥定理

GCD SUM

Time Limit: 8000/4000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others)

SubmitStatus

Problem Description

给出N,M
执行如下程序:
long long  ans = 0,ansx = 0,ansy = 0;
for(int i = 1; i <= N; i ++)
   for(int j = 1; j <= M; j ++)
       if(gcd(i,j) == 1) ans ++,ansx += i,ansy += j;
cout << ans << " " << ansx << " " << ansy << endl;

Input

多组数据,每行两个数N,M(1 <= N,M <= 100000)。

Output

如题所描述,每行输出3个数,ans,ansx,ansy,空格隔开

Sample Input

5 5
1 3

Sample Output

19 55 55
3 3 6

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 using namespace std;
 5 #define MAX 100010
 6 #define ll long long
 7 ll mu[MAX]= {0},mb[MAX]= {0};
 8 void init()
 9 {
10     int i,j;
11     for(i=2; i<MAX; i++)
12     {
13         if(!mu[i])
14         {
15             mu[i]=i;
16             if(i>1000)continue;
17             j=i*i;
18             while(j<MAX)
19             {
20                 mu[j]=i;
21                 j+=i;
22             }
23         }
24     }
25     mu[1]=1;
26     for(i=2; i<MAX; i++)
27     {
28         if((i/mu[i])%mu[i]==0)mu[i]=0;
29         else mu[i]=-mu[i/mu[i]];
30     }
31     for(i=1; i<MAX; i++)
32     mb[i]=mu[i]*i,mu[i]+=mu[i-1],mb[i]+=mb[i-1];
33 }
34 void solve(int n,int m)
35 {
36     ll ans,ansx,ansy,x,y;
37     ans=ansx=ansy=0;
38     int i,j,k;
39     for(i=(n>m?m:n);i>0;)
40     {
41         x=n/i,y=m/i;
42         k=max(n/(x+1),m/(y+1));
43         ans+=x*y*(mu[i]-mu[k]);
44         ansx+=(mb[i]-mb[k])*y*(1+x)*x/2;
45         ansy+=(mb[i]-mb[k])*x*(1+y)*y/2;
46         i=k;
47     }
48     printf("%lld %lld %lld\n",ans,ansx,ansy);
49 }
50 int main()
51 {
52     init();
53     int n,m;
54     while(scanf("%d%d",&n,&m)!=EOF)
55     {
56         solve(n,m);
57     }
58 }

GCD SUM 强大的数论,容斥定理

时间: 2024-11-05 17:26:31

GCD SUM 强大的数论,容斥定理的相关文章

HDU 1695 GCD(容斥定理)

GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7529    Accepted Submission(s): 2773 Problem Description Given 5 integers: a, b, c, d, k, you're to find x in a...b, y in c...d that GCD(x, y

poj1091跳蚤(容斥定理)

题目:Z城市居住着很多只跳蚤.在Z城市周六生活频道有一个娱乐节目.一只跳蚤将被请上一个高空钢丝的正中央.钢丝很长,可以看作是无限长.节目主持人会给该跳蚤发一张卡片.卡片上写有N+1个自然数.其中最后一个是M,而前N个数都不超过M,卡片上允许有相同的数字.跳蚤每次可以从卡片上任意选择一个自然数S,然后向左,或向右跳S个单位长度.而他最终的任务是跳到距离他左边一个单位长度的地方,并捡起位于那里的礼物.比如当N=2,M=18时,持有卡片(10, 15, 18)的跳蚤,就可以完成任务:他可以先向左跳10

cf451E Devu and Flowers 卢卡斯定理+容斥定理

题目:http://codeforces.com/problemset/problem/451/E 题意:有n个盒子(n<=20),每个盒子中有10^12个小球,现从每个盒子中取出若干球(可为0),求共取出s个小球(s<=10^14)的方案数. 组合数学问题,求C(n,m).但n,m过大时,可用卢卡斯定理. 卢卡斯定理:C(n,m) %p = C(n/p,m/p) * C(n%p,m%p) 从n个盒子中取出s个球的方案数,相当于插板,即 C(s+n-1,n-1).注意这是没有限制条件的情况.

HDU1796 How many integers can you find【容斥定理】

题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=1796 题目大意: 给你一个整数N.和M个整数的集合{A1.A2.-.Am}.集合内元素为非负数(包括零),求小于N的 正整数(1~N-1)中,能被M个整数的集合中随意一个元素整除的正整数个数. 比如N = 12.M = {2,3},在1~N-1中,能被2整除的数为{2,4,6.8.10},能被3整除的数为 {3.6,9}.则所求集合为{2,3,4.6,8,9,10},共7个,则答案为7. 思路:

POJ 1150 The Last Non-zero Digit 数论+容斥

POJ 1150 The Last Non-zero Digit 数论+容斥 题目地址: POJ 1150 题意: 求排列P(n, m)后面第一个非0的数. 分析: 为了熟悉题目中的理论,我先做了俩初级的题目: POJ 1401,题解见:POJ 1401 && ZOJ 2202 Factorial 阶乘N!的末尾零的个数 NYOJ 954,题解见:NYOJ 954 求N!二进制末尾几个0 这题想了一下,十进制末尾几个0可以转化为几个5因子,二进制最后一位非0可以转化为2因子,但是10进制就

HDU 1796 How many integers can you find (容斥定理 + 二进制)

How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5493    Accepted Submission(s): 1567 Problem Description Now you get a number N, and a M-integers set, you should

容斥定理 hdu2204 Eddy&#39;s爱好

传送门:点击打开链接 很明显会有大量重复的被计算,所以很容易就想到容斥定理. 我们设dp[i]表示能表示成M^i(i>1)且i是这个数字能表示出来的最大的情况时的总类数 比如,27拆成M^K时的K最大能表示成3,所以27这个数字分在dp[3]这一类 1我们暂时不考虑,不把它放在任何一类 因为K>1,所以K至少是2,最大是2^K=N的时候,所以K最大等于log2(N),所以K非常的小 首先,求出K最大大概的位置 然后开始求dp[i].求法如下: 首先,1~N中有哪些是能拆分成M^i的,利用pow

HDU5768Lucky7(中国剩余定理+容斥定理)(区间个数统计)

When ?? was born, seven crows flew in and stopped beside him. In its childhood, ?? had been unfortunately fall into the sea. While it was dying, seven dolphins arched its body and sent it back to the shore. It is said that ?? used to surrounded by 7

容斥定理,皮克公式

(来源:哈工大算法培训) 容斥定理:在计算集合的并集的时候,我们经常需要减去重复的部分.但是怎么减比较麻烦.容斥定理就是解决这类问题. 内容: 比如: 皮克公式: 1.如何求多边形面积: 例: 思路:按顺序两点求叉积. S=abs(1/2*((x1*y2-x2*y1)+.......+(xk*yk+1-xk+1*yk)+.........+(xn*y1-x1*yn))). 由于计算的时候可能因为顺逆时针的不同而产生正负.所以加上一个abs. 2.求多边形边上的整数点. 3. 适用于格点图. 原文