下午做了NYOJ-424Eddy's digital Roots后才正式接触了九余定理,不过这题可不是用的九余定理做的。网上的博客千篇一律,所以本篇就不发篇幅过多介绍九余定理了;

但还是要知道什么是九余定理:

九余数定理

一个数对九取余后的结果称为九余数。

一个数的各位数字之和相加后得到的<10的数字称为这个数的九余数(如果相加结果大于9,则继续各位相加)

简单的说就是:一个整数模9的结果与这个整数的各位数字之和模9的结果相同;

以前做题不知道有这个定理一般暴力就过了,求数位和也不复杂,只不过更省时间而已;

先来看看HDU-1163Eddy's digital Roots,博主是在NYOJ上做的这题时间限制是3s;

题意:求N^N的数位和(结果是个位数),开始打表找规律也没发现什么规律,于是想了另外一种方法:可以发现n的数位和的n次方再求数位和其实就等于n的n次方的数位和;比如:n=11,结果应该是5;11的数位和等于2,而2^11的数位和就等于5;进一步发现:

F(2^11)=F(8*8*8*4)=F(8*8)*F(8)*F(4)=F(64)*F(8)*F(4)=F(10)*F(8)*F(4)=F(80)*F(4)=F(8)*F(4)=F(32)=F(5)=5;

F(11^11)=F(11)*F(11)*...*F(11)=F(2)*F(2)*...*F(2)=F(2)^11=F(2^11);

所以此题就可以先求出N的数位和然后只需一层循环一直乘以N的数位和,注意当乘积大于10时需要再进行求数位和然后再重复操作;最后别忘了将循环里得到的值再求数位和;

#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i;
while(~scanf("%d",&n)&&n)
{
int sum=n;
while(sum>=10)//将n的数位和求出;
{
int x=0;
while(sum)
{
x+=sum%10;
sum/=10;
}
sum=x;
}
int d=sum;
for(i=2; i<=n; i++)
{
while(sum>=10)
{
int x=0;
while(sum)
{
x+=sum%10;
sum/=10;
}
sum=x;
}
sum*=d;
}
while(sum>=10)//最后得到的值再求数位和;
{
int x=0;
while(sum)
{
x+=sum%10;
sum/=10;
}
sum=x;
}
printf("%d\n",sum);
}
return 0;
}

上述代码在NYOJ上运行时间是1680ms,时限3s;而HDU运行时间0ms,时限1s,真是神奇呵!;

运用九余定理AC代码:确实很简洁方便!

#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,temp;
while(~scanf("%d",&n)&&n)
{
temp=n;
for(int i=2;i<=n;i++)
temp=(temp%9*n)%9;
if(temp==0)//此处需要注意;
printf("9\n");
else
printf("%d\n",temp%9);
}
return 0;
}

下面再来看NYOJ-485A*B Problem,此题题意很简单,就是求A*B的数位和;很明显方法很多,但是时限是1s,所以。。。所以这题只能用九余定理做吗?应该是的,我用九余定理运行时间986ms勉强过了,而用分治法超时了。。。

#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
long long n,m;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld",&n,&m);
if(m==0||n==0)//这里需注意一下特殊情况;
{
printf("0\n");
continue;
}
n%=9;
m%=9;
long long x=(n*m)%9;
if(x==0)
printf("9\n");
else
printf("%lld\n",x);
}
return 0;
}

HDU-1163Eddy's digital Roots,九余定理的另一种写法!的更多相关文章

  1. HDU——1163Eddy's digital Roots(九余数定理+同余定理)

    Eddy's digital Roots Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  2. 51nod 1433 0和5【数论/九余定理】

    1433 0和5 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 小K手中有n张牌,每张牌上有一个一位数的数,这个 ...

  3. HDOJ 1163 Eddy's digital Roots 九余数定理+简单数论

    我在网上看了一些大牛的题解,有些知识点不是太清楚, 因此再次整理了一下. 转载链接: http://blog.csdn.net/iamskying/article/details/4738838 ht ...

  4. FZU 1057 a^b 【数论/九余定理】

    Accept: 1164    Submit: 3722Time Limit: 1000 mSec    Memory Limit : 32768 KB Problem Description 对于任 ...

  5. hdu 5585 Numbers【大数+同余定理】

    Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  6. Digital Roots:高精度

    C - Digital Roots Description The digital root of a positive integer is found by summing the digits ...

  7. Eddy&#39;s digital Roots

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission ...

  8. 如何运用同余定理求余数【hdoj 1212 Big Number【大数求余数】】

    Big Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  9. J - Judge(快速幂)(同余定理)

    J - Judge   Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%lld & %llu Submit S ...

随机推荐

  1. jmeter(十六)Jmeter之Bean shell使用(一)

    一.什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanS ...

  2. 222 Count Complete Tree Nodes 完全二叉树的节点个数

    给出一个完全二叉树,求出该树的节点个数.完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置.若最底层为第 h ...

  3. String的用法——获取功能

    package cn.itcast_04; /* String类获取功能 int length():获取字符的长度 char charAt(int index):获取指定索引位置的字符 int ind ...

  4. 微信小程序flex布局

    一.flex布局基础 二.相对定位和绝对定位   flex的容器和元素   主轴(左-右),交叉轴(上-下)     flex容器属性详解 flex-direction 决定元素的排列方向(默认row ...

  5. hihocoder 神奇字符串

    思路: 暴力,模拟. 实现: #include <iostream> #include <algorithm> #include <cstdio> #include ...

  6. java jar文件打包成exe(Launch4j使用说明)

    在日常的项目中需要把jar打包成exe.怎样快速的实现此功能.下面通过Launch4j的使用方法来介绍整个打包过程. 第一步:生成jar文件 第二部:使用Launch4j 图来描述过,简单明了.一切尽 ...

  7. 掌握Spark机器学习库-07-回归算法原理

    1)机器学习模型理解 统计学习,神经网络 2)预测结果的衡量 代价函数(cost function).损失函数(loss function) 3)线性回归是监督学习

  8. Objective-C Memory Management Being Exceptional 异常处理与内存

    Objective-C Memory Management    Being Exceptional  异常处理与内存 3.1Cocoa requires that all exceptions mu ...

  9. elasticsearch学习笔记-倒排索引以及中文分词

    我们使用数据库的时候,如果查询条件太复杂,则会涉及到很多问题 1.无法维护,各种嵌套查询,各种复杂的查询,想要优化都无从下手 2.效率低下,一般语句复杂了之后,比如使用or,like %,,%查询之后 ...

  10. Android(java)学习笔记200:JNI之NDK的概念

    1.交叉编译 (1)概念 在一个平台(硬件)和os(软件)环境下,编译出另一种平台和os下可以运行的二进制代码. e.g:     电脑端                               ...