博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数论 - SGU 105 DIV3
阅读量:6323 次
发布时间:2019-06-22

本文共 1752 字,大约阅读时间需要 5 分钟。

SGU 105-DIV 3


 

Mean: 

定义这样一种数列:1,12,123..

给出一个n,求这个数列中能被3整除的数的个数.

analyse:

这道题可以用分析的方法解决:

  对于正整数k,k+1,k+2总有

   k+(k+1)+(k+2)

  =k+k+1+k+2

  =3k+3

  =3(k+1)

3(k+1)可以被3整除,而且,一个数是否能被3整除表现为它的各位数字之和能否被三整除.

这就意味着对于一个数12345678910111213...k(连写),我们可以从后面开始,把数字三个一组划去,剩下三个或不足三个数为止,那么剩下的数对于3的整除情况和原数一致.

  例如

        123456789

  划去一组  123456

  划去一组  123

  12可以被3整除,那么123456789也可以。又比如

        1234567891011121314

  划去一组  1234567891011

  划去一组  12345678

  划去一组  12345

  划去一组  12

  123可以被3整除,那么1234567891011121314也可以。再比如

        1234

  划去一组  1

  1不能被3整除,1234也不能。

 

  我们可以归一下类,对于一个由前k个正整数连写成的数m,如果k与3相除,余数是0或2(分别对应上述的第一和第二种情况),那么m可以被3整除;如果余数是1,那么m不能被3整除。

  综上题目可以转化为求出1-n之间有多少个能被3整除或被三整除余2的数,这就不难计算了。比较简便的方法是找出1-n之间被3除余数为1的数有多少个,记为x,那么n-x即为所求。

  现在的主要矛盾是求出x,先观察前几个正整数:

  1 2 3 4 5 6 7 8

  ^     ^     ^

  其中被标记的数被3除,余数是1。可以发现,从1开始,需要统计的数在数列中出现的周期是3,而且这些数总是出现在每个周期的第一位,因此:对于一个长度为n的数列,它含有的周期的个数(n/3向上取整数)就是上文所提的x。

  注意:由于这些数总是出现在每个周期的第一位,所以不满一周期(n被3除有余数)按照一完整周期进行计算。

Time complexity: O(1)

 

view code

/**
* -----------------------------------------------------------------
* Copyright (c) 2016 crazyacking.All rights reserved.
* -----------------------------------------------------------------
*       Author: crazyacking
*       Date  : 2016-01-06-17.53
*/
#include <queue>
#include <cstdio>
#include <set>
#include <string>
#include <stack>
#include <cmath>
#include <climits>
#include <map>
#include <cstdlib>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
using
namespace
std;
typedef
long
long(
LL);
typedef
unsigned
long
long(
ULL);
const
double
eps(
1e-8);
int
main()
{
   
int n
=
0;
   
scanf(
"%d"
,
&n);
   
if(n
%
3
==
0)
   
{
       
printf(
"%d"
, n
/
3
*
2);
   
}
   
else
   
{
       
printf(
"%d"
, n
/
3
*
2
+n
%
3
-
1);
   
}
   
return
0;
}

 

转载于:https://www.cnblogs.com/crazyacking/p/5106673.html

你可能感兴趣的文章
Python中fnmatch模块的使用
查看>>
BE镜像还原系统过程
查看>>
Linux中查看所有正在运行的进程
查看>>
H3CTE京东翰林讲师分享实验2 网络设备基本调试
查看>>
汇正进销存
查看>>
近期学习oracle 数据库总结
查看>>
php apc
查看>>
我的友情链接
查看>>
C#学习视频分享与开发技术QQ交流群
查看>>
bootstrap datetimepicker 时间控件的使用
查看>>
sudo 密码超时时间
查看>>
数学分析原理 定理 6.4
查看>>
数据结构(3)
查看>>
【西交ACM】100 A+B problem
查看>>
分布式系统的面试题14
查看>>
web标准的理解
查看>>
浅谈C中的指针和数组(一)
查看>>
你应该在开始API开发之前知道的事(下)(翻译)
查看>>
反射 -- 业务需求:执行某个类中全部的以test为开头的无参数无返回值的非静态方法。...
查看>>
C#关于值类型和引用类型的备忘
查看>>