uva 11490 - Just Another Problem

题意:这题题目有点长,不过很清楚,看懂后就可以推出一个公式 S = y(6y + 7x) ,即 S = 6y^2 + 7xy,所以S < sqrt(6y^2),所以就直接枚举S的因子就行,当然,预处理出素数然后求素因子合并自然更快,不过太麻烦了。结果要按最初的x从大到小排序,由于y是从小到大枚举的,所以x自然已经是从大到小了,可以直接输出。

#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;

#define LL long long

const int mod = 100000007;

LL ans[1111111];
bool cmp(const LL a, const LL b) {
	return a > b;
}
int main() {
	LL i, s;
	while(scanf("%lld", &s) != -1 && s) {
		int ok = 0;
		for(i = 1;i <= sqrt(s/6+0.5); i++) {
			if(s%i == 0) {
				if((s/i-i*6)%7 == 0) {
					LL cur = (s/i-i*6)/7;	
					if(cur <= 0)	continue;
					ok = 1;
					cur %= mod;
					printf("Possible Missing Soldiers = %lld\n", cur%mod*cur%mod*2%mod);
				}
			}
		}	
		if(!ok)
			puts("No Solution Possible");
		puts("");
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值