#include<bits/stdc++.h> using namespace std; struct bign{ int d[1000]; int len; bign(){ memset(d,0,sizeof(d)); len=0; } }; bign change(char str[]){ //将大数转换为bign型存储 bign a; a.len=strlen(str); for(int i=0;i<a.len;i++){ //交换高低位 a.d[i]=str[a.len-1-i]-'0'; // 交换高低位 常用代码,记住 } return a; } bign divide(bign a,int b,int &r){ //表示a/b,r是余数 bign c; //c是商,位数先和被除数定义为一样 c.len=a.len; //开始除 for(int i=a.len-1;i>=0;i--){ r=r*10+a.d[i]; //余数先和上一位遗留的余数组合 if(r<b){ c.d[i]=0; //不够除,该位为0 } else{ //够除 c.d[i]=r/b; //商 r=r%b; //获得的新余数 } } while(c.d[c.len-1]==0 && c.len-1>=1){ //去掉高位0 c.len--; //去除最高位的0,同时至少保留一位最低位。 } return c; } int main(){ char a[31]; while(scanf("%s",a)!=EOF){ if(strcmp(a, "-1") == 0){ // 使用strcmp函数比较字符串 break; } bign c=change(a); //字符串转变为大数存储 int count=0; for(int k=2;k<=9;k++){ int r=0; //余数最开始置0 divide(c,k,r); if(r==0){ printf("%d ",k); count++; } } if(count!=0){ cout<<endl; } if(count==0){ printf("none\n"); } } return 0; }