C++,公共质因数之和,为什么会超时

问题遇到的现象和发生背景

有两个正整数a和b,如果质数c既是a的因子,也是b的因子,则称c是a和b的公共质因数。

求a和b的所有公共质因数之和。

输入
多组案例。一个正整数n,表示案例的数量。(n<=100)

每组案例由两个正整数a和b组成。(a<=1e+8,b<=1e+8)

输出
针对每组案例,输出一个整数,表示a和b的所有公共质因数之和。(不会超出int范围)

每组案例输出完要换行。

问题相关代码,请勿粘贴截图
#include <iostream>
#include<cmath>
using namespace std;
bool f(int n)
{
    if (n < 2)
        return false;
    for (int i = 2;i <= sqrt(n);i++)
    {
        if (n % i == 0)
            return false;
    }
    return true;
}

int main()
{
    int n;
    cin >> n;
    for (int i = 0;i < n;i++)
    {
        int a, b, sum = 0;
        cin >> a >> b;
        int x = min(a, b);
        for (int i = 2;i <= x;i++)
        {
            if (f(i) && a % i == 0 && b % i == 0)
            {
                sum += i;
            }
        }
        cout << sum << endl;
    }
    return 0;
}

oj上超时了是怎么回事