关于下列两段简短程序的问题
#include <bits/stdc++.h>using namespace std;
typedef long long ll;
int main()
{
ll num =600851475143;
ll maxv =0;
for(ll i =2;i<int(sqrt(num))+1;++i){
while(num%i==0){
num/=i;
maxv = max(maxv,i);
}
}
cout<<maxv<<endl;
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
ll num =600851475143;
ll sc =int(sqrt(num))+1;
ll maxv =0;
for(ll i =2;i<sc;++i){
while(num%i==0){
num/=i;
maxv = max(maxv,i);
}
}
cout<<maxv<<endl;
}
为什么第二段输出的才是正确答案呢?第一段和第二段不是一个意思吗? 有没有可能是精度或是溢出问题? 无符号整形 发表于 2018-8-3 19:45
有没有可能是精度或是溢出问题?
没有溢出,答案在int范围内 #include <stdio.h>
int main (){
int i,j,k;
for(i=0;i<i+2;i++){
printf("%d ",i);
}
}
有没有点这个意思?
i<int(sqrt(num))+1;
num/=i;
关键是感觉 发表于 2018-8-3 22:18
有没有点这个意思?
i
我制杖了{:10_266:},多谢
页:
[1]