御笔剑客 发表于 2018-8-3 19:40:54

关于下列两段简短程序的问题

#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:31

有没有可能是精度或是溢出问题?

御笔剑客 发表于 2018-8-3 21:41:12

无符号整形 发表于 2018-8-3 19:45
有没有可能是精度或是溢出问题?

没有溢出,答案在int范围内

关键是感觉 发表于 2018-8-3 22:18:42

#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:27:25

关键是感觉 发表于 2018-8-3 22:18
有没有点这个意思?
i

我制杖了{:10_266:},多谢
页: [1]
查看完整版本: 关于下列两段简短程序的问题