大整数因子(高精mod)
大整数的因子
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
已知正整数k满足2<=k<=9,现给出长度最大为30位的十进制非负整数c,求所有能整除c的k。
- 输入
- 一个非负整数c,c的位数<=30。
- 输出
若存在满足 c%k == 0 的k,从小到大输出所有这样的k,相邻两个数之间用单个空格隔开;若没有这样的k,则输出"none"。
样例输入
30
样例输出
2 3 5 6
代码
高精模运算
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> using namespace std; int x[100],y[100],k[100],j=0,m,n; char a[100],b[100]; int main() { scanf("%s",a); m=strlen(a); for(int i=0; i<=m; i++) x[i+1]=a[i]-'0'; for(int p=2; p<=9; p++) { memcpy(k,x,sizeof(x)); for(int i=1; i<=m+1; i++) { k[i+1]+=(k[i]%p)*10; y[i]=k[i]%p; k[i]=k[i]/p; } if(y[m]==0) { cout<<p<<" "; j++; } } if(j==0)cout<<"none"; return 0; }
ZlycerQan
#include <iostream> using namespace std; int a[10],f=0; string t; int main() { cin >> t; for (int i = 0; t[i]; i++) for (int j = 2; j <= 9; j++) a[j] = (a[j] * 10 + t[i] - '0') % j; for (int i = 2; i <= 9; i++) if (!a[i]) { cout << i << ' '; f = 1; } if (!f) cout<<"none"; return 0; }