java与c++的效率比较
class Test
{
static int cout=0;
static int total=0;
static int sum=0;
public static void main(String[] args)
{
int n=20007;
go(n,1);
System.out.println(cout);
}
public static void go(int n,int top)
{
for(int i=top;i<=215;i++)
{
if(sum>n)return;
if(total>4)return;
if(sum==n){cout++;return;}
sum=sum+i*i;
total++;
go(n,i);
total--;
sum=sum-i*i;
}
}
}
#include <iostream>
using namespace std;
void go(int ,int);
int count=0;
int total=0;
int sum=0;
void main()
{
int n=20007;
go(n,1);
cout<<count;
}
void go(int n,int top)
{
for(int i=top;i<=215;i++)
{
if(sum>n)return;
if(total>4)return;
if(sum==n){count++;return;}
sum=sum+i*i;
total++;
go(n,i);
total--;
sum=sum-i*i;
}
}
这两个程序的算法是一样的,一个是用C++写的,一个用JAVA写的,哪个最先得到运算结果?一般的回答是:当然是用C++写的那个,但是事实是JAVA只花了大约10秒,而C++却花了大约36秒!!其中的原因是什么?!!
程序解决的问题是:拉格朗日第四定律问题
(Input File: lagrange.in; Output: Standard Output)
任何正整数都可以表示为最多不超过4个正整数的平方之和,这是众所周知的拉格朗日的Four-Square定理。这个定理首先由Joseph-Louis Lagrange在1770年证明。你的任务不是解释原初的证明,也不是发现新的证明,而是计数对某个数这个定理成立的表达式有多少种。
对一个给定的正整数n,你要报告将n表示为最多四个正整数平方和的不同表示的种数。注意,表达式中,加法的顺序是无关紧要的,即你必须把32 + 42与42 +32看作是同一种表示。例如,看25,这个数有三种表示:12+22+22+42,32 + 42, 与52,那么你就应该报告3。注意不要重复计数32 + 42与42 +32。
Input
输入最多有255行,每行是一个小于215的正整数,最后一行是一个0,表示输入的结束。
Output
输出也由多行组成,每行是单个整数。输出中没有其他字符出现。
对于每个输入整数n,输出n可表示为最多4个正整数平方之和的表示种数。
Sample Input
1
25
2003
211
20007
0
Output for the Sample Input
1
3
48
7
738
在这里,为了简单起见,在两个程序中我只选取了20007作为测试用例
{
static int cout=0;
static int total=0;
static int sum=0;
public static void main(String[] args)
{
int n=20007;
go(n,1);
System.out.println(cout);
}
public static void go(int n,int top)
{
for(int i=top;i<=215;i++)
{
if(sum>n)return;
if(total>4)return;
if(sum==n){cout++;return;}
sum=sum+i*i;
total++;
go(n,i);
total--;
sum=sum-i*i;
}
}
}
#include <iostream>
using namespace std;
void go(int ,int);
int count=0;
int total=0;
int sum=0;
void main()
{
int n=20007;
go(n,1);
cout<<count;
}
void go(int n,int top)
{
for(int i=top;i<=215;i++)
{
if(sum>n)return;
if(total>4)return;
if(sum==n){count++;return;}
sum=sum+i*i;
total++;
go(n,i);
total--;
sum=sum-i*i;
}
}
这两个程序的算法是一样的,一个是用C++写的,一个用JAVA写的,哪个最先得到运算结果?一般的回答是:当然是用C++写的那个,但是事实是JAVA只花了大约10秒,而C++却花了大约36秒!!其中的原因是什么?!!
程序解决的问题是:拉格朗日第四定律问题
(Input File: lagrange.in; Output: Standard Output)
任何正整数都可以表示为最多不超过4个正整数的平方之和,这是众所周知的拉格朗日的Four-Square定理。这个定理首先由Joseph-Louis Lagrange在1770年证明。你的任务不是解释原初的证明,也不是发现新的证明,而是计数对某个数这个定理成立的表达式有多少种。
对一个给定的正整数n,你要报告将n表示为最多四个正整数平方和的不同表示的种数。注意,表达式中,加法的顺序是无关紧要的,即你必须把32 + 42与42 +32看作是同一种表示。例如,看25,这个数有三种表示:12+22+22+42,32 + 42, 与52,那么你就应该报告3。注意不要重复计数32 + 42与42 +32。
Input
输入最多有255行,每行是一个小于215的正整数,最后一行是一个0,表示输入的结束。
Output
输出也由多行组成,每行是单个整数。输出中没有其他字符出现。
对于每个输入整数n,输出n可表示为最多4个正整数平方之和的表示种数。
Sample Input
1
25
2003
211
20007
0
Output for the Sample Input
1
3
48
7
738
在这里,为了简单起见,在两个程序中我只选取了20007作为测试用例
...全文
相关推荐
cpp-一些觉见编程语言的原生性能比较
一些编程语言(JavaScript,Kotlin,Rust,Swift,Nim,Python,Go,Haskell,D,C ,Java,C#,Object Pascal,Ada)的原生性能比较
【SpringBoot 4.x 第1节】夯爆了,为什么现在要学 Spring Boot 4.x?从零开始理解版本体系、核心变化与真实项目开发路线(超详解)!
🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。
cpp-ShuJIT针对x86处理器的JavaJustinTime编译器
ShuJIT 针对 x86处理器的Java Just-in-Time编译器
cpp:Comenzando con cpp
cpp Comenzando con cpp
我的C与C++的学习之路.zip
c 代码


非技术区
