当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个.