#include <iostream>
#include <algorithm>
using namespace std;

// この問題での最大の素数
const int MP = 999983;

// is_p[i] := i が素数のとき true
bool is_p[MP+1] = {false,false};
// cnt_p[i] := i 以下の素数の数
int cnt_p[MP+1];

// エラトステネスのふるい
void sieve(){
	for(int i = 2 ; i <= MP ; i++ )
		is_p[i] = true;
	for(int i = 2 ; i*i <= MP ; i++ ){
		if( is_p[i] ){
			for(int j = i+i ; j <= MP ; j += i ){
				is_p[j] = false;
			}
		}
	}
	// 任意の i 以下の素数の個数を求める(i <= MP)
	int cnt = 0;
	for(int i = 0 ; i <= MP ; i++ ){
		if( is_p[i] ){
			cnt++;
		}
		cnt_p[i] = cnt;
	}
}

// [a,b] の素数の個数を返す.
int get_x(int a, int b){
	a = max(1,a);
	b = min(b,MP);
	return cnt_p[b] - cnt_p[a-1];
}

int main(){
	sieve();
	int n;
	while( cin >> n , n ){
		int ans = 0;
		for(int i=0 ; i < n ; i++ ){
			int p, m;
			cin >> p >> m;
			// x := [p-m,p+m] の素数の個数
			int x = get_x(p-m,p+m);
			ans += x-1;
		}
		cout << ans << endl;
	}
}