python vs cpp 表现不同
python vs cpp behaving differently
这两个程序都是求两个数的公约数。
输入:a=100000 b=100000
python 36 (correct)
cpp 35 (wrong)
首先我找到两个数的gcd,然后找到gcd的因数以获得公约数。
我从 here 中找到了 python 程序
我试图将它转换成 cpp,但我得到了错误的答案。
python:
def ngcd(x, y):
i=1
while(i<=x and i<=y):
if(x%i==0 and y%i == 0):
gcd=i;
i+=1
return gcd;
def num_comm_div(x, y):
n = ngcd(x, y)
result = 0
z = int(n**0.5)
i = 1
while( i <= z ):
if(n % i == 0):
result += 2
if(i == n/i):
print("I am executed at ",i) # never executed
result-=1
i+=1
return result
print("Number of common divisors: ",num_comm_div(2, 4))
print("Number of common divisors: ",num_comm_div(2, 8))
print("Number of common divisors: ",num_comm_div(100000, 100000))
cpp:
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int gcd(int a,int b){
if(b==0)
return a;
return gcd(b,a%b);
}
int main(){
int t;
cin>>t;
while(t--){
int a,b;
cin>>a>>b;
int n = gcd(a,b);
cout<<n<<endl;
int ans=0;
for(int i=1;i<=(int)sqrt(n);i++){
if(n%i==0){
ans+=2;
}
if(i==n/i)
{
printf("I am executed at %d \n",i);//executed at i=316
ans--;
}
}
cout<<ans<<endl;
}
}
在Python中注意这个if
:
if(n % i == 0):
result += 2
if(i == n/i):
print("I am executed at ",i) # never executed
result-=1
第二个 if
包含在第一个的正文中。你在 C++ 中对应的块应该是:
if(n%i==0){
ans+=2;
if(i==n/i)
{
printf("I am executed at %d \n",i);//executed at i=316
ans--;
}
}
这两个程序都是求两个数的公约数。
输入:a=100000 b=100000
python 36 (correct)
cpp 35 (wrong)
首先我找到两个数的gcd,然后找到gcd的因数以获得公约数。 我从 here 中找到了 python 程序 我试图将它转换成 cpp,但我得到了错误的答案。
python:
def ngcd(x, y):
i=1
while(i<=x and i<=y):
if(x%i==0 and y%i == 0):
gcd=i;
i+=1
return gcd;
def num_comm_div(x, y):
n = ngcd(x, y)
result = 0
z = int(n**0.5)
i = 1
while( i <= z ):
if(n % i == 0):
result += 2
if(i == n/i):
print("I am executed at ",i) # never executed
result-=1
i+=1
return result
print("Number of common divisors: ",num_comm_div(2, 4))
print("Number of common divisors: ",num_comm_div(2, 8))
print("Number of common divisors: ",num_comm_div(100000, 100000))
cpp:
#include<bits/stdc++.h>
#include<cmath>
using namespace std;
int gcd(int a,int b){
if(b==0)
return a;
return gcd(b,a%b);
}
int main(){
int t;
cin>>t;
while(t--){
int a,b;
cin>>a>>b;
int n = gcd(a,b);
cout<<n<<endl;
int ans=0;
for(int i=1;i<=(int)sqrt(n);i++){
if(n%i==0){
ans+=2;
}
if(i==n/i)
{
printf("I am executed at %d \n",i);//executed at i=316
ans--;
}
}
cout<<ans<<endl;
}
}
在Python中注意这个if
:
if(n % i == 0):
result += 2
if(i == n/i):
print("I am executed at ",i) # never executed
result-=1
第二个 if
包含在第一个的正文中。你在 C++ 中对应的块应该是:
if(n%i==0){
ans+=2;
if(i==n/i)
{
printf("I am executed at %d \n",i);//executed at i=316
ans--;
}
}