首页 > 代码库 > 大整数因子(高精mod)

大整数因子(高精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;
}

 

 

大整数因子(高精mod)