如何判断一个整数是不是一个大整数的因子
2008-11-11 11:43
435 查看
这是一个同模取余的问题,我们可以先用一个数组把那个大整数装起
来,然后对数组中的每一个元素取余并乘以它的进制把它加到它的下一位元素里
面,最后判断数组中的最后一个元素是否能被那个除数整除。
如果大整数的位数很大,我们可以采用千进制,或万进制来对它取余
,这样可以提高几倍的效率。但是在倒数第二位元素取余之后,到底是乘以10,
100,还是1000是由最后一个元素的位数来决定的,假如用千进制来取余,那么
变换大整数后,数组中的元素除了最后一个元素之外,其余的数都三位数,最后
一个元素可能是一位,二位或三位。
下面是判断整数k是否是变换后的大整数lc[]的因子的代码:
bool isfactor(int k,int length) //length表示数组的长度,用10000来取余
{ //的,lc[]是把大整数化为10000进制后
int i; //的数组
for(i=0;i<length-2;++i)
{
//if(k == 23)
// cout<<lc[i]<<" "<<lc[i]%k<<endl;
lc[i+1]+=(lc[i]%k)*10000;
}
int temp = lc[i]%k,flag = lc[i+1];
int r = 1;
while(flag) //最后一个乘以10,100,还是1000由其位数来
{ //决定。
flag/=10;
r*=10;
}
temp = temp*r+lc[i+1];
//if(k==23) cout<<lc[i]<<" "<<lc[i]%k<<endl;
if(temp%k==0) return true;
return false;
}
来,然后对数组中的每一个元素取余并乘以它的进制把它加到它的下一位元素里
面,最后判断数组中的最后一个元素是否能被那个除数整除。
如果大整数的位数很大,我们可以采用千进制,或万进制来对它取余
,这样可以提高几倍的效率。但是在倒数第二位元素取余之后,到底是乘以10,
100,还是1000是由最后一个元素的位数来决定的,假如用千进制来取余,那么
变换大整数后,数组中的元素除了最后一个元素之外,其余的数都三位数,最后
一个元素可能是一位,二位或三位。
下面是判断整数k是否是变换后的大整数lc[]的因子的代码:
bool isfactor(int k,int length) //length表示数组的长度,用10000来取余
{ //的,lc[]是把大整数化为10000进制后
int i; //的数组
for(i=0;i<length-2;++i)
{
//if(k == 23)
// cout<<lc[i]<<" "<<lc[i]%k<<endl;
lc[i+1]+=(lc[i]%k)*10000;
}
int temp = lc[i]%k,flag = lc[i+1];
int r = 1;
while(flag) //最后一个乘以10,100,还是1000由其位数来
{ //决定。
flag/=10;
r*=10;
}
temp = temp*r+lc[i+1];
//if(k==23) cout<<lc[i]<<" "<<lc[i]%k<<endl;
if(temp%k==0) return true;
return false;
}
相关文章推荐
- 如何判断一个整数是不是奇数----最佳方式
- 如何判断一个整数是不是完全平方数
- 如何判断一个整数是不是奇数----最佳方式
- 如何判断一个数是不是2的整数次方
- 如何用一个语句判断一个整数是不是二的整数次幂?
- C语言-----如何用C语言判断一个数是不是整数
- js如何判断一个数是不是整数类型
- IOS中如何判断一个数是不是整数
- 如何判断一个整数数组中是否有重复元素?要求时间复杂度O(n),空间复杂度O(1)
- 如何判断一个对象是不是数组?--xyp_hf
- 如何判断一个数是否在40亿个整数中
- java 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果
- 浮点数在intel上的二进制存储结构,以及如何判断一个浮点数是否为整数
- 判断一个整数是不是2的阶次方数
- 如何判断一个整数是否为奇数
- 如何判断一个整数是否是2的整数次幂
- 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果
- 如何判断一个日期是不是周六和周日
- 如何判断一个数是不是2的n次幂
- 如何判断一个数是不是完全平方数