一道已知K是一个大于或等于2的整数,求最小正整数N,使得N!是K的倍数。
#include <stdio.h>
int gcd(int a,int b){
while(b != 0){
int temp = a % b;
a = b;
b = temp;
}
return a;
}
int isPrime(int n){
if(n <= 1)return 0;
for(int i = 2;i * i <= n;i++) {
if(n % i == 0)return 0;
}
return 1;
}
int main(void){
long long int p;
scanf("%lld",&p);
if(p == 1 || isPrime(p) == 1)printf("%lld",p);
else{
for(int i = 2;;i++) {
int divisor = gcd(i, p);
if(divisor != 1){
p /= divisor;
if(p == 1) {
printf("%lld",i);
break;
}
if(i < p && isPrime(p)){
printf("%lld",p);
break;
}
}
}
}
return 0;
}
代码没有问题,但是在输入比较大的数(十位数),运行结果就是错误的,(用c++就没有问题)
#include<iostream>
using namespace std;
long long int p;
bool isPrime(int p){
if(p == 1) return false;
for (int i = 2; i*i <= p; i++) {
if(p % i == 0) return false;
}
return true;
}
int gcd(int a,int b){
if(b == 0) return a;
return gcd(b,a%b);
}
int main(){
cin>>p;
if (p == 1 || isPrime(p)) {
cout<<p;
}
else{
for (int i = 2; ; i++) {
if (gcd(i,p) != 1) {
p /= gcd(i,p);
if (p == 1) {
cout<<i;
break;
}
if (i < p && isPrime(p)) {
cout<<p;
break;
}
}
}
}
return 0;
}
```麻烦哪位大佬帮忙解决一下