题目描述:

给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。

输入:

两个整数n(2<=n<=1000),a(2<=a<=1000)

输出:

一个整数.

样例输入:
6 10
样例输出:
1

这道题貌似简单,但对n!,当n = 1000,其值远远超过int的范围,因此不能用简单的方法来求解。
考虑到整除的问题,可以将a拆分成几个质因子的乘积,记录每个质因子的个数,之后对于i从1到n,求解每一个i包含这些质因子的个数并求和。最后算和里总共包括多少个a的质因子个数,即可得出答案
代码如下
 #include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cmath>
#define MAX 1002
// 15 14 13 12 11 10 8 6 5 4 2 1
// 10 2 5
bool isPrime(int n) {
if(n <= ) {
return false;
}
else if(n == ) {
return false;
}
else {
int two = sqrt(n);
for(int i = ; i <= two; i++) {
if(n % i == ) {
return false;
}
}
return true;
} } int yin[MAX];
int prime[MAX];
int yinCount[MAX];
int yinNum[MAX]; int main(int argc, char const *argv[])
{
int n, a;
int j = ;
for(int i = ; i < MAX; i++) {
if(isPrime(i) == true) {
prime[j] = i;
j++;
}
}
int pC = j;
while(scanf("%d %d",&n,&a) != EOF) {
j = ;
memset(yinCount,,sizeof(yinCount));
memset(yinNum,,sizeof(yinNum));
for(int i = ; i < pC && prime[i] <= a; i++) {
if(a % prime[i] == ) {
int temp = a;
int tempCount = ;
while(temp % prime[i] == ) {
temp = temp/prime[i];
tempCount++;
}
yin[j] = prime[i];
yinNum[j] = tempCount;
j++;
}
} for(int i = ; i <= n; i++) {
for(int k = ; k < j; k++) {
if(i % yin[k] == ) {
int temp = i;
int tempCount = ;
while(temp % yin[k] == ) {
temp = temp/yin[k];
tempCount++;
}
yinCount[k] = yinCount[k] + tempCount;
}
}
} /* for(int i = 0; i < j; i++) {
printf("%d %d %d\n",yin[i],yinNum[i],yinCount[i]);
}*/
// 1 2 3 4 5
// 2 2 2 2 2
int ans = ;
bool flag = true;
while(flag) {
for(int i = ; i <= j; i++) {
yinCount[i] = yinCount[i] - yinNum[i];
if(yinCount[i] < ) {
flag = false;
break;
}
}
if(flag == true) {
ans++;
}
} printf("%d\n",ans);
}
return ;
}

九度oj 题目1104:整除问题的更多相关文章

  1. 九度OJ 题目1384:二维数组中的查找

    /********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...

  2. hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人

    钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  3. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

  4. 九度oj 题目1007:奥运排序问题

    九度oj 题目1007:奥运排序问题   恢复 题目描述: 按要求,给国家进行排名. 输入:                        有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...

  5. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  6. 九度OJ题目1105:字符串的反码

    tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...

  7. 九度oj题目1009:二叉搜索树

    题目描述: 判断两序列是否为同一二叉搜索树序列 输入:                        开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...

  8. 九度oj题目1002:Grading

    //不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...

  9. 九度OJ题目1003:A+B

    while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...

随机推荐

  1. 设置office首字母不变大小的手段

    选项->校对—〉自动更正选项->“自动更正”页,句首字母大写,取消就行了

  2. socket使用非阻塞connect

    在使用tcp的connect调用时,默认是使用阻塞方式,当服务器当前不可用时,connect会等待(内部在重试?)直到超时时间到达,而这个超时时间是系统内核规定的,不能使用setSocketOpt来设 ...

  3. python super详解

    一.super() 的入门使用 - 在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能, 这时,我们就需要调用父类的方法了,可通过使用 super 来实 ...

  4. 编写Robotium测试程序

    6.编写Robotium测试程序 1)导包 //导入需要测试的工程 import com.example.android.notepad.NotesList; //robotium提供的测试用类 im ...

  5. ZOJ 3626 Treasure Hunt I (树形DP,常规)

    题意:给一棵树,一个人站在节点s,他有m天时间去获取各个节点上的权值,并且最后需要回到起点s,经过每条边需要消耗v天,问最少能收获多少权值? 思路: 常规的,注意还得跑回原地s. //#include ...

  6. Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理

    面试问题:Java里的代理设计模式(Proxy Design Pattern)一共有几种实现方式?这个题目很像孔乙己问"茴香豆的茴字有哪几种写法?" 所谓代理模式,是指客户端(Cl ...

  7. 迅为10.1寸人机界面工业HMI安卓电容屏定制生产供应商

    10.1寸人机界面介绍: 配置铁电存储器:非易失性记忆体,掉电后数据不丢失. 连接云端,支持云服务:数据综合管理,更有效率. 静电防护技术:高强度抗干扰,防静电,防电磁干扰. 提供所有接口的调用源码, ...

  8. javase(5)_面向对象

    一.概述 1.面向对象是一种思想,让我们由执行者变成指挥者,执行者是面向过程,指挥者是面向对象.例如人开冰箱门,开冰箱门这个动作应该属于门而不是人,冰箱自己最清楚门应该怎么开,人只是调用了冰箱的这个动 ...

  9. CS193p Lecture 9 - Animation, Autolayout

    Animation(动画) Demo Dropit续 Autolayout(自动布局) 三种添加自动布局的方法: 使用蓝色辅助虚线,右键选择建议约束(Reset to Suggested Constr ...

  10. docker系列之基础命令-1

    1.docker基础命令 docker images 显示镜像列表 docker ps 显示容器列表 docker run IMAGE_ID 指定镜像, 运行一个容器 docker start/sto ...