UVA 11490 - Just Another Problem(数论)

11490 - Just Another Problem

题目链接

题意:有S个士兵,排成一个矩阵,矩阵中可以有两个洞,要求两个洞上下左右厚度一样,问能缺少士兵的情况数。

思路:推推公式,设厚度为a, 正方形为i, 那么(3 a + 2 i) (2
a + i) = S + 2 i i;

化简一下得到6 i i + 7 a i = S

由于S很大,所以去枚举厚度,这样只要枚举到sqrt(S)就够了,复杂度可以接受

代码:

#include <stdio.h>
#include <string.h>
#include <math.h>

const long long MOD =100000007;
long long n;

int main() {
	while (~scanf("%lld", &n) && n) {
		int flag = 1;
		for (long long i = 1; i * i * 6 < n; i++) {
			long long tmp = n - i * i * 6;
			if (tmp % (7 * i) == 0) {
				long long ans = tmp / (7 * i) % MOD;
				printf("Possible Missing Soldiers = %lld\n", ans * ans * 2 % MOD);
				flag = 0;
   			}
  		}
  		if (flag) printf("No Solution Possible\n");
  		printf("\n");
 	}
	return 0;
}

UVA 11490 - Just Another Problem(数论),布布扣,bubuko.com

时间: 2024-12-20 11:39:30

UVA 11490 - Just Another Problem(数论)的相关文章

uva 11490 - Just Another Problem(数学)

题目链接:uva 11490 - Just Another Problem 题目大意:有n个士兵,要排列成一个方阵,要求方阵尽量大,于是在方正的中间会空出两个正方形的区域,空出来的局域要求厚度相同,即正方形的四条边向相应方向均再有x行或者列. 解题思路:根据题意可以知道x(6x+7r)=n,x为厚度,r为正方形的边长.接着枚举x,x是n的因子. #include <cstdio> #include <cstring> #include <cmath> typedef l

UVA 1363 - Joseph&#39;s Problem(数论)

UVA 1363 - Joseph's Problem 题目链接 题意:给定n, k,求出∑ni=1(k mod i) 思路:由于n和k都很大,直接暴力是行不通的,然后在纸上画了一些情况,就发现其实对于k/i相同的那些项是形成等差数列的,于是就可以把整个序列进行拆分成[k,k/2],[k/2, k/3], [k/3,k/4]...k[k/a, k/b]这样的等差数列,利用大步小步算法思想,这里a枚举到sqrt(k)就可以了,这样就还剩下[1,k/a]的序列需要去枚举,总时间复杂度为O(sqrt(

UVA - 11490 Just Another Problem (因数分解)

There is a wise saying "Nothingis unfair in love and war". Probably that is why emperors of ancient days usedto use many funny and clever tricks to fool the opponents. The most commontechnique was to scare the opponent away by out numbering them

UVa 11490 Just Another Problem

方法:数学 整除 根据推导发现新的方阵长为2*x+3*d, 宽为 x+2*d, 面积满足方程 (2*x+3*d)*(x+2*d) = S + 2*x*x. (d为thickness) (比较合理的方法) 继而得到 x = (S-6*d*d)/(7*d) 枚举d即可. code: #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <

[2016-02-19][UVA][524][Prime Ring Problem]

UVA - 524 Prime Ring Problem Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Submit Status Description A ring is composed of n (even number) circles as shown in diagram. Put natural numbers  into each circle separately, and the

UVA 10837 - A Research Problem(欧拉函数)

UVA 10837 - A Research Problem 题目链接 题意:给定phi(n),求最小满足的最小的n 思路:phi(n)=pk11(p1?1)?pk22(p2?1)?pk33(p3?1)....(p为质数),因此对于给定phi(n),先把满足条件phi(n)%(p?1)=0的素数全找出来,在这些素数基础上进行暴力搜索,枚举哪些素数用与不用,求出最小值.这样做看似时间复杂度很高,但是实际上,由于每次多选一个素数之后对于值是呈指数上升的,所以实际组合出来的情况并不会太多,因此是可行的

UVA 1341 - Different Digits(数论)

UVA 1341 - Different Digits 题目链接 题意:给定一个正整数n,求一个kn使得kn上用的数字最少,如果相同,则输出值最小的 思路: 首先利用鸽笼原理证明最多需要2个数字去组成 设一个数字k,组成k,kk,kkk,kkkk... %n之后余数必然在0 - (n - 1)之间,所以必然能选出两个余数相等的数字相减为0,这个数字就是由0和k组成的. 因此只要考虑一个数字和两个数字的情况,去bfs,记忆化余数,因为余数重复必然形成周期了 代码: #include <stdio.

UVA 10693 10693 - Traffic Volume(数论)

题目链接:10693 - Traffic Volume 根据物理知识, 车经过的时间等于,距离/速度,所以可以列出公式t = (l + d)/v,v/2f + d/v,只有当v / 2f = d/v时,时间最小,v = sqrt(2df),之后时间也能算了. #include <stdio.h> #include <string.h> #include <math.h> double l, f; int main() { while (~scanf("%lf%

UVA 618 - Doing Windows(数论)

题目链接:618 - Doing Windows 题意:给定一个大小不能变的屏幕,和四个大小可以变的窗口,变化要保持长宽比,问这四个窗口能不能调整后全部放下正好填满屏幕,不能重叠 思路:情况一共就几种:4个叠一起,3个叠一起+一个,2个和2个,一个和两个叠一起在一个,把这几种情况全判断了就可以了,判断过程利用gcd,lcm可以求边长. 代码: #include <stdio.h> #include <string.h> long long gcd(long long a, long