一道考题---当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时,a= 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个.

 

posted on 2016-01-12 19:03  逸阳  阅读(385)  评论(0编辑  收藏  举报

导航