int answer3() { long number = 600851475143L; long backup_number = number; int factor = 1; while (number > 1) { increment_factor(4); while (number % factor == 0) number = number / factor; if (number <= 1) break; increment_factor(2); while (number % factor == 0) number = number / factor; } return factor; }
//------------------------------------------------------------------- // Process button presses when in GUI_MODE_MENU mode int gui_menu_kbd_process() { switch (kbd_get_autoclicked_key() | get_jogdial_direction()) { case KEY_ERASE: case KEY_SHOOT_HALF: if (!increment_factor()) int_incr = 1; gui_menu_redraw=1; break; case JOGDIAL_LEFT: case KEY_UP: gui_menu_updown(-1); break; case JOGDIAL_RIGHT: case KEY_DOWN: gui_menu_updown(1); break; case FRONTDIAL_LEFT: case KEY_LEFT: if (gui_menu_curr_item >= 0) { switch (curr_menu->menu[gui_menu_curr_item].type & MENUITEM_MASK) { case MENUITEM_INT: update_int_value(&curr_menu->menu[gui_menu_curr_item],-1); break; case MENUITEM_BOOL: update_bool_value(&curr_menu->menu[gui_menu_curr_item]); break; case MENUITEM_ENUM: case MENUITEM_ENUM2: update_enum_value(&curr_menu->menu[gui_menu_curr_item],-1); break; case MENUITEM_UP: gui_menu_back(); break; case MENUITEM_STATE_VAL_PAIR: { CMenuItem *c = (CMenuItem*)(curr_menu->menu[gui_menu_curr_item].value); if (*(c[1].value) == 0) update_bool_value(&c[1]); switch (c[0].type & MENUITEM_MASK) { case MENUITEM_INT: update_int_value(&c[0],-1); break; case MENUITEM_ENUM: case MENUITEM_ENUM2: update_enum_value(&c[0],-1); break; } } break; } } else { gui_menu_back(); } break; case FRONTDIAL_RIGHT: case KEY_RIGHT: if (gui_menu_curr_item >= 0) { switch (curr_menu->menu[gui_menu_curr_item].type & MENUITEM_MASK){ case MENUITEM_INT: update_int_value(&curr_menu->menu[gui_menu_curr_item],1); break; case MENUITEM_BOOL: update_bool_value(&curr_menu->menu[gui_menu_curr_item]); break; case MENUITEM_ENUM: case MENUITEM_ENUM2: update_enum_value(&curr_menu->menu[gui_menu_curr_item],1); break; case MENUITEM_SUBMENU_PROC: select_proc(); break; case MENUITEM_SUBMENU: select_sub_menu(); break; case MENUITEM_STATE_VAL_PAIR: { CMenuItem *c = (CMenuItem*)(curr_menu->menu[gui_menu_curr_item].value); if (*(c[1].value) == 0) update_bool_value(&c[1]); switch (c[0].type & MENUITEM_MASK) { case MENUITEM_INT: update_int_value(&c[0],1); break; case MENUITEM_ENUM: case MENUITEM_ENUM2: update_enum_value(&c[0],1); break; } } break; } } break; case KEY_SET: if (gui_menu_curr_item >= 0) { switch (curr_menu->menu[gui_menu_curr_item].type & MENUITEM_MASK){ case MENUITEM_INT: if (camera_info.state.is_shutter_half_press) { *(curr_menu->menu[gui_menu_curr_item].value) = 0; gui_menu_redraw=1; } break; case MENUITEM_BOOL: update_bool_value(&curr_menu->menu[gui_menu_curr_item]); break; case MENUITEM_SUBMENU_PROC: case MENUITEM_PROC: select_proc(); break; case MENUITEM_SUBMENU: select_sub_menu(); break; case MENUITEM_UP: gui_menu_back(); break; case MENUITEM_COLOR_FG: case MENUITEM_COLOR_BG: item_color=((unsigned char*)(curr_menu->menu[gui_menu_curr_item].value)) + (((curr_menu->menu[gui_menu_curr_item].type & MENUITEM_MASK)==MENUITEM_COLOR_BG)?1:0); libpalette->show_palette(PALETTE_MODE_SELECT, FG_COLOR(*item_color), gui_menu_color_selected); gui_menu_redraw=2; break; case MENUITEM_ENUM: case MENUITEM_ENUM2: update_enum_value(&curr_menu->menu[gui_menu_curr_item],1); gui_menu_redraw=1; break; case MENUITEM_STATE_VAL_PAIR: { CMenuItem *c = (CMenuItem*)(curr_menu->menu[gui_menu_curr_item].value); if ((c[1].type & MENUITEM_MASK) == MENUITEM_ENUM) update_enum_value(&c[1],1); else update_bool_value(&c[1]); } break; } } break; case KEY_ZOOM_IN: if (decrement_factor()) gui_menu_redraw = 1; break; case KEY_ZOOM_OUT: if (increment_factor()) gui_menu_redraw = 1; break; case KEY_DISPLAY: if (camera_info.cam_has_zoom_lever) { gui_menu_back(); } else { // For cams without zoom lever, DISP adjusts increment factor if (!increment_factor()) int_incr = 1; gui_menu_redraw=1; } break; } return 0; }