一道考题---当n=1,2,3...2015时,统计3n+n3能整除7的个数
当n=1,2,3...2015时,统计3n+n3能整除7的个数。
编程解法:
#include <iostream>
#include <cmath>
using namespace std;
int mod_pow(int c , int d , int n)
{
int res=1;
while(d>0){
if(d&1)
res=res*c%n;
c=c*c%n;
d>>=1;
}
return res;
}
int main(){
int i=1;
int sum=0,count=0;
for(i;i<=2015;i++){
sum=0;
sum+=mod_pow(3,i,7);
int temp=i%7;
sum+=(temp*temp*temp)%7;
sum%=7;
if(sum==0) count++;
}
cout<<count;
return 0;
}
得个数为288.
其实本题考查的是数学同余的知识,重点在于同余的分析。编程解法只是验证下同余解法是否正确。
下面是同余解法: 由(a+b)%c = (a%c+b%c)%c,分析,我们可以分别讨论n3和3n被7整除的情况
首先分析n3被7整除的余数的规律:
令n=7m+a (m为正整除,a=0,1,2...6)
则n3 = (7m+a)3=7m(7m+a)2+a(7m+a)2 = 7m(7m+a)2+a(7m+a)(7m+a) = 7m(7m+a)2+a*7m(7m+a)+a2(7m+a) = 7m(7m+a)2+a*7m(7m+a)+7ma2+a3
因此我们只需要看a3被7整除的余数即可.
当a=0时,a3 = 0 = 7* 0 + 0 n3被7整除,余数为 0
当a=1时,a3 = 1 = 7* 0 + 1, n3被7整除,余数为 1
当a=2时,a3 = 8 = 7* 1 + 1, n3被7整除,余数为 1
当a=3时,a3 = 27 = 7* 3 + 6, n3被7整除,余数为 6
当a=4时,a3 = 64 = 7* 9 + 1, n3被7整除,余数为 1
当a=5时,a3 = 125= 7*17 + 6, n3被7整除,余数为 6
当a=6时,a3 = 216= 7*30 + 6, n3被7整除,余数为 6
因此,n3 被7整除的余数规律为 周期为7的数:1、1、6、1、6、6、0
接下来分析3n被7整除的余数的规律.
n=1 3n 被7整除的余数为3
n=2 3n 被7整除的余数为2
n=3 3n 被7整除的余数为6
n=4 3n 被7整除的余数为4
n=5 3n 被7整除的余数为5
n=6 3n 被7整除的余数为1
n=7 3n 被7整除的余数为3
n=8 3n 被7整除的余数为2
n=9 3n 被7整除的余数为6
n=10 3n 被7整除的余数为4
n=11 3n 被7整除的余数为5
n=12 3n 被7整除的余数为1
因此,3n 被7整除的余数规律为 周期为6的数:3、2、6、4、5、1
分析n3被7整除的余数的周期为7,分别为1、1、6、1、6、6、0
3n被7整除的余数的周期为6,分别为3、2、6、4、5、1
则n3 + 3n 被7整除的周期起码6*7=42. 42中情况中有6钟情况下二者之和能被7整除,如下表.

又有2015 = 42*47+41 ,即有47个周期+41个数(如表最后一个不能被7整除,也就不是6个钟的1个,所以后41个数中也有6个能被7整除),所以能被7整除的数就有47*6+6=288个.
浙公网安备 33010602011771号