您的位置:首页 > 其它

题目1104:整除问题(还是求素数)

2017-04-13 23:40 190 查看
题目链接:http://ac.jobdu.com/problem.php?pid=1104

详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus

参考代码:

//
//  1104 整除问题.cpp
//  Jobdu
//
//  Created by PengFei_Zheng on 13/04/2017.
//  Copyright © 2017 PengFei_Zheng. All rights reserved.
//

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <cmath>

using namespace std;

int n, a;
int prime[1001];
bool mark[1001];
int primeSize;
int cnt1[1001],cnt2[1001];

void init() {
primeSize = 0;
memset(mark,false,sizeof(mark));
for(int i = 2 ; i < 1001 ; i++) {
if(mark[i]) continue;
prime[primeSize++] = i;
for(int j = i*i ; j < 1001 ; j +=i)
mark[j] = true;
}
}

int main(){
init();
while(scanf("%d%d",&n,&a)!=EOF){

memset(cnt1,0,sizeof(cnt1));
memset(cnt2,0,sizeof(cnt2));

for(int i = 0; i < primeSize ; i++){
int tmp = n;
while(tmp!=0){
cnt1[i]+=tmp/prime[i];
tmp/=prime[i];
}
}
int ans = 100100100;
for(int i = 0 ; i < primeSize ; i++){
while(a%prime[i]==0){
cnt2[i]++;
a/=prime[i];
}
if (cnt2[i] == 0)
continue;
if(cnt1[i]/cnt2[i]<ans)
ans =cnt1[i]/cnt2[i];
}
printf("%d\n",ans);
}
return 0;
}
/**************************************************************
Problem: 1104
User: zpfbuaa
Language: C++
Result: Accepted
Time:0 ms
Memory:1532 kb
****************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: