HDU1719:Friend
来源:互联网 发布:数据分析下载-搜狗应用 编辑:程序博客网 时间:2024/05/16 07:04
Problem Description
Friend number are defined recursively as follows.
(1) numbers 1 and 2 are friend number;
(2) if a and b are friend numbers, so is ab+a+b;
(3) only the numbers defined in (1) and (2) are friend number.
Now your task is to judge whether an integer is a friend number.
(1) numbers 1 and 2 are friend number;
(2) if a and b are friend numbers, so is ab+a+b;
(3) only the numbers defined in (1) and (2) are friend number.
Now your task is to judge whether an integer is a friend number.
Input
There are several lines in input, each line has a nunnegative integer a, 0<=a<=2^30.
Output
For the number a on each line of the input, if a is a friend number, output “YES!”, otherwise output “NO!”.
Sample Input
31312112131
Sample Output
YES!YES!NO!
这道题就是以道纯数学题,我记得第一次看到这道题还是在刚刚搞ACM不久的时候,当时硬是没有想出解决的方法
直到昨天训练赛的时候又出了这道题,仍然是没有弄出来,果然我的数学思维还是不行啊,在看了别人的题解之后,终于算是看懂意思了,在此有必要解释一下
首先,原式ab+a+b = ab+a+b+1-1 = (a+1)*(b+1)-1
令a = (a1+1)*(a2+1)-1;
b = (b1+1)*(b2+1)-1;
代入原式中可得:n = (a1+1)*(b1+1)*(a2+1)*(b2+1)-1;
因为原式的朋友数都是由1,2推到出来的
所以递推到最底层,那么(a1+1)*(b1+1)*(a2+1)*(b2+1)肯定是2,3的倍数(即是1+1,2+1)
所以最后就是要解决n+1得到的数到底是不是只有2,3这些因子
#include <stdio.h>int main(){ __int64 n; while(~scanf("%I64d",&n)) { if(!n) { printf("NO!\n"); continue; } n++; while(n%2==0) n/=2; while(n%3 == 0) n/=3; if(n==1) printf("YES!\n"); else printf("NO!\n"); } return 0;}
- HDU1719:Friend
- hdu1719(Friend)
- hdu1719 Friend
- hdu1719(Friend)
- HDU1719 Friend【数学规律】
- hdu1719-Friend(规律)
- hdu1719
- HDU1719
- friend
- friend
- Friend
- Friend
- friend
- friend
- Friend
- friend
- Friend
- Friend
- 手工搭建SSH框架
- HDU 1412 搬寝室 DP
- 经典排序算法——快速排序
- sql注入登陆(菜鸟级)
- 使用 Felix 和 Struts2 开发 Web 应用
- HDU1719:Friend
- ZOJ 3647 Gao the Grid
- Win7无线配置工具VC++(Soft-Ap,Wifi,无线承载网络,ICS,Wifi)
- HDU 1421 动态规划(DP) 搬寝室
- UBUNTU 下编译安装opencv
- uva11027 - Palindromic Permutation(回文排列)
- hdu 1241 Oil Deposits 简单dfs
- HTML与CSS入门经典(第7版本)读书笔记一---第一部分 第一二章
- poj 2411