#include<iostream>
#include<stdio.h>
using namespace std;
#include <set>
#include<vector>
#include<algorithm>
#define ll long long
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <cmath>
#include <cstring>
#include<queue>
#include<map>
#include<stack>
#include<bits/stdc++.h>
#include<bits/stdc++.h>
#include<stdio.h>
using namespace std;
#include <set>
#define ll long long

const int maxn = 2e7+7;
const ll mod = 1e9+7;
const ll INF=5e18+7;
const int inf=1e9+7;
const ll maxx=1e6+700;

bool vis[maxn];//标记非素数,0是素数
int primer[maxn/10];//存素数
int cnt=0;//记录素数个数，
ll sum[maxn];
void init(){
    for(int i=2;i<=20000000;i++){
        if(!vis[i])primer[cnt++]=i,sum[i]=1;
        for(int j=0;j<cnt&&primer[j]*i<=20000000;j++){
            vis[i*primer[j]]=1;//筛
            if(i%primer[j]==0){
            	sum[primer[j]*i]=sum[i];
				break;//关键！！！找到i*primer[j]的最小质因子primer[j]，退出
			}
			sum[primer[j]*i]=sum[i]+1;
        }
    }    
}

int t,c,d,n,m;
ll ans;
ll qpow(ll a,ll b)
{
    ll ans=1;
    while(b)
    {
        if(b&1)
        ans=1ll*ans*a;
        a=1ll*a*a;
        b>>=1;
    }
    return ans;
}

ll work(int x){
	if((d+x)%c) return 0;
	int r=(d+x)/c;
	return qpow(2,sum[r]);
}



int main(){
	scanf("%d",&t);
	init();
	while(t--){
		ans=0;
		scanf("%d%d%d",&c,&d,&n);
		for(int i=1;i*i<=n;i++){
			if(n%i==0){
				ans+=work(i);
				if(n/i!=i) ans+=work(n/i);
			}
		}
		printf("%lld\n",ans);
	}
}




		   	  	 		  	 	 	 		 		  				