#include <stdio.h>
#include <stdlib.h>
typedef struct series series;
struct series {
long num;
series *next;
};
series *head = NULL;
void addhead(long x)
{
series *p;
p
= (series
*) malloc(sizeof (series
)); p->num = x;
p->next = head;
head = p;
//printf("added: %ld\n", x);
}
void series_generate(long num)
{
long n = 1;
addhead(n);
while (n < num)
{
series *p;
for (p = head; p != NULL; p = p->next)
{
long bf = p->num - 1;
if (p->num%2 == 0 && bf != 0 && bf%3 == 0) {
bf /= 3;
if (bf != 1)
addhead(bf);
if (bf < num)
n++;
//printf("new num: %ld\n", bf);
}
p->num *= 2;
if ( p->num < num)
n++;
//printf("new num: %ld\n", p->num);
}
}
}
int main()
{
long num = 1000000;
series_generate(num);
series *p;
for (p = head; p != NULL; p = p->next) {
if (p->num < num) {
break;
}
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IHNlcmllcyBzZXJpZXM7CnN0cnVjdCBzZXJpZXMgewoJbG9uZyBudW07CglzZXJpZXMgKm5leHQ7Cn07CnNlcmllcyAqaGVhZCA9IE5VTEw7Cgp2b2lkIGFkZGhlYWQobG9uZyB4KQp7CglzZXJpZXMgKnA7CglwID0gKHNlcmllcyAqKSBtYWxsb2Moc2l6ZW9mIChzZXJpZXMpKTsJCglwLT5udW0gPSB4OwoJcC0+bmV4dCA9IGhlYWQ7CgloZWFkID0gcDsKCS8vcHJpbnRmKCJhZGRlZDogJWxkXG4iLCB4KTsKfQp2b2lkIHNlcmllc19nZW5lcmF0ZShsb25nIG51bSkKewoJbG9uZyBuID0gMTsKCWFkZGhlYWQobik7Cgl3aGlsZSAobiA8IG51bSkgCgl7CgkJc2VyaWVzICpwOwoJCWZvciAocCA9IGhlYWQ7IHAgIT0gTlVMTDsgcCA9IHAtPm5leHQpCgkJewoJCQlsb25nIGJmID0gcC0+bnVtIC0gMTsKCQkJaWYgKHAtPm51bSUyID09IDAgJiYgYmYgIT0gMCAmJiBiZiUzID09IDApIHsKCQkJCWJmIC89IDM7CgkJCQlpZiAoYmYgIT0gMSkKCQkJCWFkZGhlYWQoYmYpOwoJCQkJaWYgKGJmIDwgbnVtKQoJCQkJCW4rKzsgCgkJCQkvL3ByaW50ZigibmV3IG51bTogJWxkXG4iLCBiZik7CgkJCX0KCQkJcC0+bnVtICo9IDI7CgkJCWlmICggcC0+bnVtIDwgbnVtKQoJCQkJbisrOwogCQkJLy9wcmludGYoIm5ldyBudW06ICVsZFxuIiwgcC0+bnVtKTsKCgkJfQkKCX0JCn0KaW50IG1haW4oKQp7Cglsb25nIG51bSA9IDEwMDAwMDA7CglzZXJpZXNfZ2VuZXJhdGUobnVtKTsKCXNlcmllcyAqcDsKCWZvciAocCA9IGhlYWQ7IHAgIT0gTlVMTDsgcCA9IHAtPm5leHQpIHsKCQlpZiAocC0+bnVtIDwgbnVtKSB7CgkJCXByaW50ZigiJWxkXG4iLCBwLT5udW0pOwoJCQlicmVhazsKCQl9Cgl9CglyZXR1cm4gMDsKfQ==