Factovisors - PC110704
欢迎访问我的新博客:http://www.milkcu.com/blog/
原文地址:http://www.milkcu.com/blog/archives/uva10139.html
原创:
作者:MilkCu
题目描述
Problem D: Factovisors
The factorial function, n! is defined thus for n a non-negative integer:
0! = 1
n! = n * (n-1)! (n > 0)
We say that a divides b if there exists an integer k such that
k*a = b
The input to your program consists of several lines, each containing two non-negative integers, n and m, both less than 2^31. For each input line, output a line stating whether or not m divides n!, in the format
shown below.
Sample Input
6 9
6 27
20 10000
20 100000
1000 1009
Output for Sample Input
9 divides 6!
27 does not divide 6!
10000 divides 20!
100000 does not divide 20!
1009 does not divide 1000!
解题思路
思路比较流畅,依次求2~n之间的数与m的最大公约数,然后用公约数去除m。
若m能被除尽,则m可以整除n!;否则不能。
但是提交到UVaOJ为什么会超时呢?看来还需要优化。
如果在遍历2~n之间的数时,遇到的数i为质数。
若m为素数且m>n,则m与2~n中的任何数互素。
其他优化:把开方放在循环外边。
从n到2递减寻找最大公约数可以提高效率。
还要注意特殊情况的处理。
PC可以通过,UVaOJ总是超时,太浪费时间了。
对于我的不高的要求,以后使用PC吧。
两种求最大公约数的方法:
1. 递归
int gcd(int a, int b) {
if(b == 0) {
return a;
}
if(a < b) {
return gcd(b, a);
}
return gcd(b, a % b);
}
2. 循环
int gcd(int a, int b) {
if(a < b) {
int tmp = a;
a = b;
b = tmp;
}
while(b > 0) {
int tmp = a;
a = b;
b = tmp % b;
}
return a;
}
代码实现
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int isPrime(int x) {
int sq = sqrt(x);
for(int i = 2; i <= sq; i++) {
if(x % i == 0) {
return 0;
}
}
return 1;
}
int gcd(int a, int b) {
if(a < b) {
int tmp = a;
a = b;
b = tmp;
}
while(b > 0) {
int tmp = a;
a = b;
b = tmp % b;
}
return a;
}
int main(void) {
int n, m;
while(cin >> n >> m) {
if(m == 0) {
cout << m << " does not divide " << n << "!" << endl;
continue;
}
if(m == 1) {
cout << m << " divides " << n << "!" << endl;
continue;
}
if(isPrime(m) && m > n) {
cout << m << " does not divide " << n << "!" << endl;
continue;
}
int tm = m;
for(int i = n; i >= 2; i--) {
int g = gcd(i, tm);
if(g > 1) {
//cout << i << " " << g << endl;
tm /= g;
}
if(tm == 1) {
cout << m << " divides " << n << "!" << endl;
break;
}
}
if(tm != 1) {
cout << m << " does not divide " << n << "!" << endl;
}
}
return 0;
}
(全文完)
本文地址:http://blog.csdn.net/milkcu/article/details/23592449
Factovisors - PC110704的更多相关文章
- UVA 10139 Factovisors(数论)
Factovisors The factorial function, n! is defined thus for n a non-negative integer: 0! = 1 n! = n * ...
- poj 2649 Factovisors 对n!进行因数分解
Factovisors Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4431 Accepted: 1086 Descr ...
- Kattis之旅——Factovisors
The factorial function, n! is defined thus for n a non-negative integer: 0! = 1 n! = n * (n-1)! (n & ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- ACM训练计划step 1 [非原创]
(Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成 ...
- HOJ题目分类
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
- 开涛spring3(9.3) - Spring的事务 之 9.3 编程式事务
9.3 编程式事务 9.3.1 编程式事务概述 所谓编程式事务指的是通过编码方式实现事务,即类似于JDBC编程实现事务管理. Spring框架提供一致的事务抽象,因此对于JDBC还是JTA事务都是 ...
- 算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- 从“n!末尾有多少个0”谈起
在学习循环控制结构的时候,我们经常会看到这样一道例题或习题.问n!末尾有多少个0?POJ 1401就是这样的一道题. [例1]Factorial (POJ 1401). Description The ...
随机推荐
- 产品 线上 保持 和 支持 服务 (Support and maintenance solutions)
Maintenance and support are the key factors for the smooth functioning of ERP solutions. ERP mainten ...
- Nlog 配置总结
Writes log messages to one or more files. Since NLog 4.3 the ${basedir} isn't needed anymore for rel ...
- HDU 5281 Senior's Gun (贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5281 贪心题目,但是看看我的博客里边相关贪心的题解实在是少的可怜,这里就写出来供大家一起探讨. 题意还 ...
- jdk1.7 变更
个人实遇: 1.6与1.7 :SimpleDateFormat,1.6要求yyyy必须小写,1.7兼容大小写: jdk 8 新特性: 官方pdf文档(英文版)私人下载地址:http://pan.bai ...
- java Json字符串转List<Map>类型
//相关包 import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonPa ...
- crm使用soap删除实体
//C# 代码: //DeleteEntityRequest request = new DeleteEntityRequest(); //request.LogicalName = "ne ...
- Apache conf文件配置个人总结
其实说到conf文件的配置,网上那必定是大堆大堆的,故今儿写着篇小博文,也只是做个总结,至于分享的价值吗,如果对屏幕前的你有用,我也很乐意啦. 首先,我们要找到Apache安装目录,我的是Ap ...
- jQuery遍历table中间tr td并获得td价值
jQuery遍历table中间tr td并获得td中间值 $(function(){ $("#tableId tr").find("td").each(func ...
- Asp.Net+Easyui实现重大CRUD
今天周四称,这应该给自己一个休息,好好休息休息,但无奈自己IT这是痴迷.甘心的想加加班把目标功能实现,功夫不负有心人.经过6个小时的鏖战,我最终成功了. 在此和大家分享下成果,希望大家给个赞. 我的目 ...
- Redis源代码分析(一)--Redis结构解析
从今天起,本人将会展开对Redis源代码的学习,Redis的代码规模比較小,很适合学习,是一份很不错的学习资料,数了一下大概100个文件左右的样子,用的是C语言写的.希望终于能把他啃完吧,C语言好久不 ...