题目大意是第一行输入T,第二行输入n,m,一个数组a[i]=i,下面m行每行一个操作,输入1,x,p,则表示把a[i]修改为p,输入2,x,y,p,则表示询问[x,y]区间内和p互质的数的个数
//比起原来的那个求一个数在一个区间里与之互质的个数,用map映射后,每次的求解最多多1000次判断互质计算
//求和的时候两数相乘大于了int的范围,这个地方需要注意
#include<cstdio>
#include<iostream>
#include<map>
#include<vector>
#define ll long long
using namespace std;
vector<int> x;
map<int,int> Map;
int n,m;
void getprime(int n)
{
//质因数分解,去掉相同的质因数
x.clear();
for(int i=2; i*i<=n; ++i)
{
if(n%i==0)
{
n/=i;
x.push_back(i);
while(n%i==0) n/=i;
}
}
if(n!