欧拉计划第一题(改进版)

/*
*Copyright(c) 2011,烟台大学计算机学院学生
*All rights reserved.
*文件名称:欧拉计划第一题
*作       者:Mr_chang
*完成日期: 2012年 12月15 日
*对任务及求解方法的描述部分:虽然代码较长自认为比传统的一般方法(进行n次判断),浪费的时间少了
*输入描述:NULL
*问题描述:

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.


*程序输出:sum

*问题分析:采用等差数列的思想,先求出所给范围内每个数的倍数数,然后利用此倍数求和sum1和sum2。再求出两数的最小公倍数,用同样的方法求出sum3

                     则两数共有的倍数的和为sum3.所以sum=sum1+sum2

*算法设计:NULL
public class TestOula
{
    public static void main(String[] args)
	{
		Oula o1=new Oula(1000,3,5);
		System.out.println(o1.dis());
	}
	
}
class Oula
{
	public int s;
	public int n1,n2;
	public Oula()
	{}
	public Oula(int s,int n1,int n2)
	{
		this.s=s;
		this.n1=n1;
		this.n2=n2;
	}
	public int getBeishu(int x,int y)
	{
		int g=x*y;
		for(int i=1;i<g;i++)
		{
			if((i%x==0)&&(i%y==0))
			return i;
		}
		return g;
	}
	public int dis()
	{
		int a=s/n1;
		if(n1*a==s)
			a-=1;
		int b=s/n2;
		if(n2*b==s)
			b-=1;
		int n3=this.getBeishu(n1, n2);
		int c=s/n3;
		if(n3*c==s)
			c-=1;
		int sum1=(n1*a*(a+1))/2;
		int sum2=(n2*b*(b+1))/2;
		int sum3=(n3*c*(c+1))/2;
		int sum=sum1+sum2-sum3;
		return sum;	
	}
}

总结:main方法中改变不同的值可以做类似的其他数值计算!!!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值