1. 程式人生 > 其它 >C. Floor and Mod codeforces-701-div2 思維 + 數學

C. Floor and Mod codeforces-701-div2 思維 + 數學

技術標籤:CodeForces

701C
在這裡插入圖片描述

input

9
3 4
2 100
4 3
50 3
12 4
69 420
12345 6789
123456 789
12345678 9

output

1
0
2
3
5
141
53384
160909
36

solution

假 設 x / y = x % y = a 假設x/y=x\%y=a x/y=x%y=a

按 照 a = 1 開 始 枚 舉 , a = i 時 按照a=1開始列舉,a=i時 a=1a=i
最 小 的 符 合 次 情 況 的 點 對 為 ( i ∗ ( i + 2 ) , i + 1 ) 最小的符合次情況的點對為(i*(i+2),i+1)

(i(i+2),i+1)
因 此 符 合 的 點 對 為 ( i ∗ ( i + 2 ) + i ∗ t , i + 1 + t ) , t ∈ Z + , r e s + = t 詳 情 見 代 碼 因此符合的點對為(i*(i+2)+i*t,i+1+t),t∈Z_+,res+=t詳情見程式碼 (i(i+2)+it,i+1+t)tZ+res+=t

code

    //Siberian Squirrel
    //#include<bits/stdc++.h>
    //#include<unordered_map>
#include<algorithm> #include<iostream> #include<cstring> #include<cmath> //#define ACM_LOCAL using namespace std; typedef long long ll; const double PI = acos(-1); const double eps = 1e-7; const int MOD = 3221225473; const
int N = 5e6 + 10; const int UP = 1e4; inline ll solve(int x, int y, ll res = 0) { // res += min(x, y - 1); for(int i = 1; ; ++ i) { int temp = i * (i + 2), _temp = i + 1; if(temp > x || _temp > y) break; res += min((x - temp) / i + 1, y - i); } return res; } int main() { #ifdef ACM_LOCAL freopen("input", "r", stdin); freopen("output", "w", stdout); #endif int o = 1, n, m, x, y; scanf("%d", &o); while(o --) { scanf("%d%d", &x, &y); printf("%lld\n", solve(x, y)); } return 0; }