【转自Matrix67】判定被7、11、13整除的简易方法

本文介绍了一种高效判断大数字是否能被7整除的方法,并通过实例演示了具体步骤。该方法同样适用于判断是否能被11和13整除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    判断一个数的整除性对于某些除数来说是一件非常容易的事,比如2、3、4、5、6、8、9、10、11、12、15……
    但是对于7来说一直是一个难题,而判定是否被7整除在数字运算中又比较常用。我刚看到一种判定能否被7整除的方法,在这里写一下。
    比如,我们要看86415能否被7整除。首先我们把它从个位开始往左边走两个数字一组划分开来,这样,86415就划分成8 64 15;然后,从左开始“一加一减找余数”:

    6       6
    8  64  15
        1

    看上面,6+8正好被7整除,64-1被7整除,15+6被7整除
    然后把找到的余数从右往左读出来,616,现在,如果616能被7整除,那么86415就能被7整除。
    如果你还看不出616能被7整除的话,可以继续这样做下去:

    1
    6  16
        2

    现在很明显了吧,21能被7整除。因此,86415就能被7整除。
    下面我再举一个例子:6913580247。

     1       5       2
    69  13  58  02  47
         6       2

    22561

    5       2
    2  25  61
        4

    245能被7整除,因此6913580247能被7整除。

    更加奇妙的是,这个方法对于判定被11整除、被13整除同样有效。
    至于为什么,我没仔细研究,估计和那个有关。看到7、11、13这三个数,你难道还想不起那个吗?
    最后补充:比较流行的割位法对于三位数、四位数比较简便;但位数一多,显然这种方法比较简便。6913580247我们用这种方法只做了两次,用割位法要做9次!
1)从键盘输入若干学生的成绩,输出最高和最低成绩,当输入负数时结束,请将程序补充完整。 #include<iostream> using namespace std; main() { float x,amax,amin; cin>>x; amax=x; amin=x; while(__①__) { if (x>amax) amax=x; else if (__②__) amin=x; else cin>>x; } cout<<"\n amax="<<amax<<" \n amin= "<<amin<<endl; } } 2)根据以下公式求p的值,结果由函数值返回。m与n为两个正数且要求m>n。请将程序补充完整。 #include<iostream> using namespace std; main() { int i,m,n; double p=1.0; cin>>m>>n; for(i=1;i<=m;i++) p=__①__; /*求m!*/ for(i=1;i<=n;i++) p=__②__; /*求m!/n!*/ for(i=1;i<=m-n;i++) p=p/i; /*求m!/(n!(m-n)!)*/ cout<<p<<endl; } 3)下面程序的功能是用“辗相除法”求两个正数M和N的最大公约数,将程序补充完整。 #include<iostream> using namespace std; main() { int m,n,r; cout<<"please input m&n:"; cin>>m>>n; if(m<n) __①__ r=m%n; while(r) { m=n; n=r; r=__②__; } cout<<n<<endl; } 4)下列程序求n以内所有因子的平方和,请将程序补充完整。 #include<iostream> using namespace std; main() { int i,n; long s=0; cin>>n; for(i=2;i<=n-1;i++) //从2~n-1中找n的所有因子 if(__①__) s+=__②__; //将所有因子的平方和 cout<<"s="<<s<<endl; } 5)输出1到1000之内能被5或13整除、但不能同时被5和13整除的整数,请将程序补充完整。 #include<iostream> #include<iomanip> using namespace std; main() { int i,j=0; for(i=1;i<=1000;i++) if(__①__) cout<<setw(4)<<i; } 6)计算S=(1+1/2)+(1/3+1/4)+…+(1/(2n-1)+1/2n),请将程序补充完整。 #include<iostream> #include<iomanip> using namespace std; main() { int i,n; double s=0.0; cin>>n; for(i=1;i<=n;i++) s=s+__①__; cout<<fixed<<setprecision(6)<<s<<endl; } 7)计算s=1-ln(1)-ln(2)-ln(3)-…-ln(m) ,请将程序补充完整。 #include<iostream> #include <cmath > #include<iomanip> using namespace std; main() { int i,m; double s=1.0; cin>>m; for(i=1;i<=__①__;i++) s=s-log(i); /*计算s=1-ln(1)-ln(2)-ln(3)-…-ln(m)*/ cout<<fixed<<setprecision(6)<<s<<endl; } 8)输
03-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值