Pagini recente » Cod sursa (job #1144200) | Cod sursa (job #906145) | Cod sursa (job #1732218) | Cod sursa (job #1139831) | Cod sursa (job #1639585)
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("pinex.in");
ofstream g("pinex.out");
long long m, a, b, primes[30000], dp[15];
bool erst[30000];
int erast()
{
erst[2] = false;
for (int i=2; i<=30000; i++) {
int p = 2;
if (erst[i] == false) {
while (i*p < 30000) {
erst[i*p] = true;
p++;
}
}
}
for (int i=2; i<=30000; i++) {
if (erst[i] == false)
primes[++primes[0]] = i;
}
}
int divprim(int num)
{
for (int i=1; i<=primes[0]; i++) {
if (primes[i]*primes[i] > num)
break;
if (num % primes[i] == 0) {
dp[++dp[0]] = primes[i];
while (num % primes[i] == 0)
num /= primes[i];
}
}
if (num != 1)
dp[++dp[0]] = num;
}
int main()
{
erast();
f>>m;
for (int i=1; i<=m; i++) {
f>>a>>b;
memset(dp, 0, sizeof (dp));
divprim(b);
int answ = 0;
for (int i = 1; i < (1<<dp[0]); i++) {
long long prod = 1, nbts = 0;
for (int j = 0; j < dp[0]; j++) {
if (i & (1<<j)) {
prod = prod * dp[j+1];
nbts++;
}
}
if (nbts % 2 == 0)
answ -= a / prod;
else
answ += a / prod;
}
g << a - answ <<"\n";
}
return 0;
}