【学习笔记】〖九度OJ〗题目1104:整除问题
#include<iostream> #include<cmath> using namespace std; int primef[1001];//质因子个数 int primea[1001]; int main() { freopen("input.in", "r", stdin); freopen("output.out","w", stdout); int n, a; while (cin >> n>>a) { int i,j; //清空 for (i=0; i<1001; i++) { primef[i]=0; primea[i]=0; } int max;//循环条件 //对n!分解质因子 for(i=n; i>=0; i--) { bool isOver = false; int temp = i; while(!isOver) { max = sqrt((double)temp); for (j=2; j<=max; j++) { if (temp%j == 0) { primef[j]++; temp /= j; break; } } if (j>max) { isOver = true; if(temp>1) { primef[temp]++; } } } } //对a分解质因子 int tmp = a; bool isOver = false; while(!isOver) { max = sqrt((double)tmp); for (j=2; j<=max; j++) { if (tmp%j == 0) { primea[j]++; tmp /= j; break; } } if (j>max) { if(tmp>1) { primea[tmp]++; } isOver = true; } } //寻找最小次数 int minIndex = 1000; for (i=2; i<=a; i++) { if (primea[i]!=0 &&primef[i]/primea[i] <minIndex) { minIndex = primef[i]/primea[i]; } } cout << minIndex << endl; } return 0; }