using System;
using System.Collections.Generic;
public class Test
{
static void Main()
{
int total = 0, last = 1;
for(int n = 2; n < 100000; ++n)
{
int count = factors(n);
if (last == count)
{
++total;
}
else last = count;
}
Console.WriteLine(total);
}
static int[] primes = {
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59,
61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127,
131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193,
197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269,
271, 277, 281, 283, 293, 307, 311, 313, 317
};
static int isqrt(int x)
{
int x1, g0, g1;
if (x <= 1) return x;
int s = 1;
x1 = x - 1;
if (x1 > 0xFFFF) { s = s + 8; x1 >>= 16; }
if (x1 > 0xFF) { s = s + 4; x1 >>= 8; }
if (x1 > 0xF) { s = s + 2; x1 >>= 4; }
if (x1 > 0x3) { s = s + 1; }
g0 = 1 << s;
g1 = (g0 +(x>>s)) >> 1;
while( g1 < g0) {
g0 = g1;
g1 = (g0 + (x/g0)) >> 1;
}
return g0;
}
static int factors(int m)
{
Dictionary<int,int> fs = new Dictionary<int,int>();
for(int i = 0; m > 1 && primes[i] <= isqrt(m);)
{
if (m % primes[i] != 0) { ++i; continue; }
m /= primes[i];
if(fs.ContainsKey(primes[i]))
fs[primes[i]]++;
else
fs.Add(primes[i], 1);
}
if (m > 1)
{
if(fs.ContainsKey(m))
fs[m]++;
else
fs.Add(m, 1);
}
int count = 1;
foreach(var q in fs) count *= (q.Value + 1);
return count;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXN0YXRpYyB2b2lkIE1haW4oKQoJewoJCWludCB0b3RhbCA9IDAsIGxhc3QgPSAxOwoJICAgIGZvcihpbnQgbiA9IDI7IG4gPCAxMDAwMDA7ICsrbikKCSAgICB7CgkgICAgICAgIGludCBjb3VudCA9IGZhY3RvcnMobik7CgkgICAgICAgIGlmIChsYXN0ID09IGNvdW50KQoJICAgICAgICB7CgkgICAgICAgICAgICArK3RvdGFsOwoJICAgICAgICB9CgkgICAgICAgIGVsc2UgbGFzdCA9IGNvdW50OwoJICAgIH0KCQlDb25zb2xlLldyaXRlTGluZSh0b3RhbCk7Cgl9CgoJc3RhdGljIGludFtdIHByaW1lcyA9IHsKCSAgICAyLCAzLCA1LCA3LCAxMSwgMTMsIDE3LCAxOSwgMjMsIDI5LCAzMSwgMzcsIDQxLCA0MywgNDcsIDUzLCA1OSwKCSAgICA2MSwgNjcsIDcxLCA3MywgNzksIDgzLCA4OSwgOTcsIDEwMSwgMTAzLCAxMDcsIDEwOSwgMTEzLCAxMjcsCgkgICAgMTMxLCAxMzcsIDEzOSwgMTQ5LCAxNTEsIDE1NywgMTYzLCAxNjcsIDE3MywgMTc5LCAxODEsIDE5MSwgMTkzLAoJICAgIDE5NywgMTk5LCAyMTEsIDIyMywgMjI3LCAyMjksIDIzMywgMjM5LCAyNDEsIDI1MSwgMjU3LCAyNjMsIDI2OSwKCSAgICAyNzEsIDI3NywgMjgxLCAyODMsIDI5MywgMzA3LCAzMTEsIDMxMywgMzE3Cgl9OwoKCXN0YXRpYyBpbnQgaXNxcnQoaW50IHgpCgl7CgkgICAgaW50IHgxLCBnMCwgZzE7CgkgICAgaWYgKHggPD0gMSkgcmV0dXJuIHg7CgkgICAgaW50IHMgPSAxOwoJICAgIHgxID0geCAtIDE7CgkgICAgaWYgKHgxID4gMHhGRkZGKSAgICAgeyBzID0gcyArICA4OyB4MSA+Pj0gMTY7IH0KCSAgICBpZiAoeDEgPiAweEZGKSAgICAgICB7IHMgPSBzICsgIDQ7IHgxID4+PSAgODsgfQoJICAgIGlmICh4MSA+IDB4RikgICAgICAgIHsgcyA9IHMgKyAgMjsgeDEgPj49ICA0OyB9CgkgICAgaWYgKHgxID4gMHgzKSAgICAgICAgeyBzID0gcyArICAxOyB9CgkKCSAgICBnMCA9IDEgPDwgczsKCSAgICBnMSA9IChnMCArKHg+PnMpKSA+PiAxOwoJICAgIHdoaWxlKCBnMSA8IGcwKSB7CgkgICAgICAgIGcwID0gZzE7CgkgICAgICAgIGcxID0gKGcwICsgKHgvZzApKSA+PiAxOwoJICAgIH0KCSAgICByZXR1cm4gZzA7Cgl9CgoJc3RhdGljIGludCBmYWN0b3JzKGludCBtKQoJewoJICAgIERpY3Rpb25hcnk8aW50LGludD4gZnMgPSBuZXcgRGljdGlvbmFyeTxpbnQsaW50PigpOwoJICAgIGZvcihpbnQgaSA9IDA7IG0gPiAxICYmIHByaW1lc1tpXSA8PSBpc3FydChtKTspCgkgICAgewoJCQlpZiAobSAlIHByaW1lc1tpXSAhPSAwKSB7ICsraTsgY29udGludWU7IH0KCQkJbSAvPSBwcmltZXNbaV07CgkJCQoJCQlpZihmcy5Db250YWluc0tleShwcmltZXNbaV0pKQoJCQkJZnNbcHJpbWVzW2ldXSsrOwoJCQllbHNlCgkJCQlmcy5BZGQocHJpbWVzW2ldLCAxKTsgICAKCSAgICB9CgkgICAgaWYgKG0gPiAxKSAKCQl7CgkJCWlmKGZzLkNvbnRhaW5zS2V5KG0pKSAKCQkJCWZzW21dKys7CgkJCWVsc2UKCQkJCWZzLkFkZChtLCAxKTsKCQl9CgkgICAgaW50IGNvdW50ID0gMTsKCSAgICBmb3JlYWNoKHZhciBxIGluIGZzKSBjb3VudCAqPSAocS5WYWx1ZSArIDEpOwoJICAgIHJldHVybiBjb3VudDsKCX0KfQ==