有一个质数p,和两个区间,,分别在两个区间中取一个数x,y。求有多少对使得是p的倍数。给定你两个区间,求从区间中取出数相乘是p的倍数的个数。
public long numbers (int a, int b, int c, int d, int p) { long countLeft = 0; for (int i = a; i <= b; i++) { if (i % p == 0) { countLeft ++; } } long countRight = 0; for (int i = c; i <= d; i++) { if (i % p == 0) { countRight ++; } } return countLeft * (d - c + 1) + countRight * (b - a + 1) - countLeft * countRight; }
import java.util.*; public class Solution { /** * 返回两个区间内各取一个值相乘是p的倍数的个数 * @param a int整型 第一个区间的左边界 * @param b int整型 第一个区间的右边界 * @param c int整型 第二个区间的左边界 * @param d int整型 第二个区间的右边界 * @param p int整型 质数 * @return long长整型 */ public long numbers (int a, int b, int c, int d, int p) { // write code here long count1 = a%p!=0? b/p-a/p:b/p-a/p+1; long count2 = c%p!=0? d/p-c/p:d/p-c/p+1; long res=count1*(d-c+1)+count2*(b-a+1)-count1*count2; return res; } }