九度OJ 1104:整除问题 (整除、因式分解)
2015-10-23 17:33
316 查看
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:4142
解决:1346
题目描述:
给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。
输入:
两个整数n(2<=n<=1000),a(2<=a<=1000)
输出:
一个整数.
样例输入:
样例输出:
来源:2011年上海交通大学计算机研究生机试真题
思路:
对a进行因式分解,记录素因子以及个数。计算n!过程中,累加记录的相关素因子个数,直到所有的素因子个数都超过a的素因子个数乘(k+1),这时的n减去1就是答案。
但该题如果给定输入数据不当,可能会存在bug,即对所有的k,都同时满足或同时不满足被a^k整除和被a^(k+1)整除。
代码:
内存限制:32 兆
特殊判题:否
提交:4142
解决:1346
题目描述:
给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。
输入:
两个整数n(2<=n<=1000),a(2<=a<=1000)
输出:
一个整数.
样例输入:
6 10
样例输出:
1
来源:2011年上海交通大学计算机研究生机试真题
思路:
对a进行因式分解,记录素因子以及个数。计算n!过程中,累加记录的相关素因子个数,直到所有的素因子个数都超过a的素因子个数乘(k+1),这时的n减去1就是答案。
但该题如果给定输入数据不当,可能会存在bug,即对所有的k,都同时满足或同时不满足被a^k整除和被a^(k+1)整除。
代码:
#include <stdio.h> #include <math.h> #include <string.h> #define N 1000 int p[N+1], cp; typedef struct node { int num; int count; int acount; } PP; PP pa[N+1]; int cpa; int isprime(int x) { for (int i=2; i<=sqrt(x); i++) { if (x%i == 0) return 0; } return 1; } void getPrimes(int x) { int i = 1; cpa = 0; while (x != 1) { if (x % p[i] == 0) { cpa ++; pa[cpa].num = p[i]; pa[cpa].count = 0; while (x % p[i] == 0) { pa[cpa].count ++; x /= p[i]; } } i ++; } } int main(void) { int n, a, k, i, j, r; cp = 0; for (i=2; i<=N; i++) { if (isprime(i)) p[++cp] = i; } //for (i=1; i<=cp; i++) // printf("%d ", p[i]); //printf("\n"); while (scanf("%d%d", &n, &a) != EOF) { getPrimes(a); for (r=1; r<=cpa; r++) pa[r].acount = 0; for(i=2; i<=n; i++) { j = i; r = 1; while (j != 1) { if (r > cpa) break; while (j%(pa[r].num) == 0) { pa[r].acount ++; j /= (pa[r].num); } r ++; } } k = pa[1].acount/pa[1].count; for (r=2; r<=cpa; r++) { int kk = pa[r].acount/pa[r].count; if (kk < k) k = kk; } printf("%d\n", k); //for (r=1; r<=cpa; r++) // printf("%d %d %d\n", pa[r].num, pa[r].count, pa[r].acount); } return 0; } /************************************************************** Problem: 1104 User: liangrx06 Language: C Result: Accepted Time:10 ms Memory:944 kb ****************************************************************/
相关文章推荐
- Linux查找文件find命令用法
- 九度OJ 1104:整除问题 (整除、因式分解)
- 练习2 F题 - 平方和与立方和
- 操作系统全图
- 暴力字符串 Codeforces Div. 2 A Mr. Kitayuta's Gift
- android-从官网下拉源码(ubuntu)
- 服务框架Dubbo
- C#时间转换UInt64<--->DateTime
- androdi与服务器Socket通信原理
- SeekBar thumb不居中显示的解决办法
- 九度OJ 1103:二次方程计算器 (解方程)
- django models进行数据库增删查改
- C# Winform下载文件并显示进度条
- php里面的变量从哪里来?
- 九度OJ 1103:二次方程计算器 (解方程)
- 域名转发
- 工作周报061
- 【SSH】--SSH框架简介
- SQL Server常用的几种启动方式
- Tomcat starting even after port is in use(Address already in use), 即使connector端口被占用也会继续启动.