湘潭oj1203/邀请赛A称号 数论+java睑板

乞讨 n%1+n%2+n%3+n%4+.........n%n=,n<=10^12次要。

一味的找规律之初。没有发现。后来,前辈执教后,人才平淡,所以,现在唯一明确的。

首先在地图上:

对于该题,在求区间(根号n,n),因为n%i=n-i*x(这里x是从1枚举到根号n,每一个k 相应n/(x+1)~n/x区间内。因为是等差数列(还是递减)。直接用公式求和)。

哎(根号n,n)区间是被切割来求得。分成根号n次。

import java.io.*;
import java.util.Scanner;
import java.math.BigInteger;
public class Main{

	public static void main(String[] args) {
		int T;
	    Scanner in=new Scanner(System.in);
	    T=in.nextInt();
	    for(int ii=1;ii<=T;ii++)
	    {
	          long n;
	          BigInteger sum=new BigInteger("0");
	           n=in.nextLong();
	           long lasta=2*n;
	        for(long i=1;i*i<n;i++)
	        {
	        	 sum=sum.add(BigInteger.valueOf(n%i));
	        	 if((i+1)>=lasta){break;}              //边界推断
	        	  long b=n/i;
	              long a=n/(i+1)+1;
	              BigInteger temp1=BigInteger.valueOf(n);         //将一个 long型数据转为biginteger
	              temp1=temp1.multiply(BigInteger.valueOf((b-a+1)));
	              BigInteger temp2=BigInteger.valueOf(b+a);
	              temp2=temp2.multiply(BigInteger.valueOf(i));    //*
	              temp2=temp2.multiply(BigInteger.valueOf(b-a+1));
	              temp2=temp2.divide(BigInteger.valueOf(2));   //除以
	              temp1=temp1.subtract(temp2);                 // -
	            sum=sum.add(temp1);                             //+
	           lasta=a;
	        }
	         System.out.println("Case "+ii+": "+sum);         //Java的println自己主动带换行。注意!
	    }

	}

}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-08-29 21:47:48

湘潭oj1203/邀请赛A称号 数论+java睑板的相关文章

湘潭oj1203/邀请赛A题 数论+java大数

求 n%1+n%2+n%3+n%4+.........n%n=,n<=10^12次. 开始时盲目地找规律,结果一无所获.后来经学长点拨,天资愚钝,搞了半天才明白. 先上图: 对于该题,在求区间(根号n,n),由于n%i=n-i*x(这里x是从1枚举到根号n,每个k 对应n/(x+1)~n/x区间内,由于是等差数列(还是递减),直接用公式求和). 哎(根号n,n)区间是被分割来求得,分成根号n次. import java.io.*; import java.util.Scanner; import

2014湘潭全国邀请赛I题 Intervals /POJ 3680 / 在限制次数下取有权区间使权最大/小问题(费用流)

先说POJ3680:给n个有权(权<10w)开区间(n<200),(区间最多数到10w)保证数轴上所有数最多被覆盖k次的情况下要求总权最大,输出最大权. 思路:       限制的处理:s-->开始流量为k,要求总权最大,即费用最大,所以费用取负,最小费用最大流即可.对于输入区间[a,b]:w,添加边:a-->b,流量为1,费用为-w. 对于点i,i+1,添加边,费用为0,流量无穷.显然这种处理,限制了区间最多取k次,(流量控制),跑最大流能走添加的边尽量走,且越大越好(负数刚刚是

nyoj 517 最小公倍数 【java睑板】

我写了一个gcd TL该.然后调用math内gcd,AC该... 思维:它是采取n前面的最小公倍数和n求 1~n的最小公倍数 代码: import java.util.Scanner; import java.math.*; public class Main{ public static void main(String[] args){ Scanner cin = new Scanner(System.in); BigInteger[] s = new BigInteger[102]; s[

HDOJ 1047 Integer Inquiry

JAVA睑板.... Integer Inquiry Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 12042    Accepted Submission(s): 3037 Problem Description One of the first users of BIT's new supercomputer was Chip D

2018年湘潭邀请赛

题目链接: http://acm.hdu.edu.cn/listproblem.php?vol=53 A题: 题意: 总共有sum(a[i])篇文章,文章含有i条引用的文章数是ai,求最大的h使得最少有h篇文章含有至少h条引用. 思路: 二分,不过一开始把i和ai的含义读反wa了几发. 代码实现如下: 1 #include <set> 2 #include <map> 3 #include <deque> 4 #include <queue> 5 #incl

hdu 5047 Sawtooth--2014acm上海赛区邀请赛(附java模板)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5047 Sawtooth Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 377    Accepted Submission(s): 116 Problem Description Think about a plane: ● One st

[java线段树]2015上海邀请赛 D Doom

题意:n个数 m个询问 每个询问[l, r]的和, 再把[l, r]之间所有的数变为平方(模为9223372034707292160LL) 很明显的线段树 看到这个模(LLONG_MAX为9223372036854775807) 很明显平方时会爆LL 很容易发现所有数平方模了几次之后值就不再改变了 而且这个“几次”相当小 因此直接暴力搞就好了 public static void main(String[] args) { Scanner in = new Scanner(System.in);

[java]2015上海邀请赛 B Base64

题意: 给n和一个字符串(可以有空格) 求字符串编码n次后的字符串 编码方式:字符串的每个字符转化成ASCII码, ASCII码转化成8位2进制,    将二进制数分割成6位为一组的(不够的补0), 再变成十进制数 依次按照以下方式变成字母 转化成字母后, 若长度不是4的整数倍, 在字符串后面补= 举个例子, The的ASCII码分别为84,104,101 转成8位2进制为01010100,01101000,01100101 分割成6位的为010101,000110,100001,100101

HDU 1722 Cake (数论 gcd)(Java版)

Big Number 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1722 --每天在线,欢迎留言谈论. 题目大意: 给你两个数 n1,n2 . 然后你有一块蛋糕,提前切好,使得不管来 n1 还是 n2 个人都能够当场平均分配. 求 "提前切好" 的最小蛋糕块数. 知识点: (请无视)公式:N = a + b + gcd(a, b) : 思路: (勿无视)先份成p块,然后再拼到一起,再从原来开始的地方,将蛋糕再分成q份,中间肯定会出现完