Can anybody help me in finding the some minor mistake in the solution

#include <iostream>
#include<bits/stdc++.h>
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
#define ll int128_t
#define int long long
#define endl "\n"
#define mod 1000000007
using namespace std;

int power(int a, int b) {
  int res = 1;

  while (b) {
    if (b & 1) {
      res = res * a % mod;
    }

    b >>= 1;
    a = a * a % mod;
  }

  return res;
}

int inv(int a) {
  return power(a, mod - 2);
}
int solve(int x,vector<int>&factor){
    int n=factor.size();
    int ans=0;
    for(int i=1;i<power(2,n);i++){
        int cnt=0;
        int pro=1;
        for(int j=0;j<n;j++){
            if(i&(1<<j)){
                cnt++;
                pro*=factor[j];
            }
        }
        if(cnt%2){
            ans+=x/pro;
        }
        else ans-=x/pro;
    }
    // cout<<endl;
    return ans;
}
int32_t main() {
    cin.tie(0)->sync_with_stdio(false);
	int t;cin>>t;
	int a[100005]={0};
	vector<int>prime;
	prime.push_back(2);
	for(int i=3;i<100005;i+=2){
	    if(a[i]==0){
	        prime.push_back(i);
	        for(int j=i*i;j<100005;j+=i){
	            a[j]=1;
	        }
	    }
	}
	while(t--){
	    int y,x1,x2;cin>>y>>x1>>x2;
	    y=abs(y);
	    if(y==1){
	        cout<<(x2-x1+1)<<endl;
	        continue;
	    }
	    vector<int>factor;
	    for(int i=0;i<prime.size();i++){
	        if(y%prime[i]==0){
	            factor.push_back(prime[i]);
	        }
	    }
	    if(factor.size()==0)factor.push_back(y);
	   // for(int i=0;i<factor.size();i++){
	   //     cout<<factor[i]<<" ";
	   // }
	   // int ans1=solve(abs(x1)-1,factor);
	   // int ans2=solve(abs(x2),factor);
	    int ans=(x2-x1+1);
	   // cout<<ans1<<" "<<ans2<<" ";
	    if(x1>0){
	        int ans1=solve(abs(x1)-1,factor);
    	    int ans2=solve(abs(x2),factor);
    	    cout<<ans-abs(ans2-ans1)<<endl;
	    }
	    else if(x2>=0){
	        int ans1=solve(abs(x1),factor);
    	    int ans2=solve(abs(x2),factor);
    	    cout<<ans-abs(ans2+ans1)-1<<endl;
	    }
	    else {
	        int ans1=solve(abs(x2)-1,factor);
    	    int ans2=solve(abs(x1),factor);
    	    cout<<ans-abs(ans2-ans1)<<endl;
	    }
	}
	cerr << "Time : " << 1000 * ((double)clock()) / CLOCKS_PER_SEC << "ms" << endl;
	return 0;
}