51Nod 1080 两个数的平方和

给出一个整数N,将N表示为2个整数i j的平方和(i <= j),如果有多种表示,按照i的递增序输出。

例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2 (注:3 11同11 3算1种)

Input

一个数N(1 <= N <= 10^9)

Output

共K行:每行2个数,i j,表示N = i^2 + j^2(0 <= i <= j)。
如果无法分解为2个数的平方和,则输出No Solution

Input示例

130

Output示例

3 11
7 9
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <vector>
 6 #include <cstdlib>
 7 #include <iomanip>
 8 #include <cmath>
 9 #include <ctime>
10 #include <map>
11 #include <set>
12 using namespace std;
13 #define lowbit(x) (x&(-x))
14 #define max(x,y) (x>y?x:y)
15 #define min(x,y) (x<y?x:y)
16 #define MAX 100000000000000000
17 #define MOD 1000000007
18 #define pi acos(-1.0)
19 #define ei exp(1)
20 #define PI 3.141592653589793238462
21 #define INF 0x3f3f3f3f3f
22 #define mem(a) (memset(a,0,sizeof(a)))
23 typedef long long ll;
24 const int N=10005;
25 const int mod=1e9+7;
26
27 int main()
28 {
29     int n;
30     cin>>n;
31     int m=(int)sqrt(n)+0.5;
32     int i,j=1;
33     int flag=1;
34     for(i=m;i>=1;i--){
35         for(j=0;j<=i;j++){
36             if(i*i+j*j==n){
37                 flag=0;
38                 cout<<j<<" "<<i<<endl;
39             }
40         }
41     }
42     if(flag) cout<<"No Solution"<<endl;
43     return 0;
44 }
时间: 2024-11-10 07:54:39

51Nod 1080 两个数的平方和的相关文章

51Nod 1080 两个数的平方和(数论,经典题)

1080 两个数的平方和 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数N,将N表示为2个整数i j的平方和(i <= j),如果有多种表示,按照i的递增序输出. 例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2 (注:3 11同11 3算1种) Input 一个数N(1 <= N <= 10^9) Output 共K行:每行2个数,i j,表示N = i^2 + j^2(0 <= i <= j).

51 nod 1080 两个数的平方和

1080 两个数的平方和 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 取消关注 给出一个整数N,将N表示为2个整数i j的平方和(i <= j),如果有多种表示,按照i的递增序输出. 例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2 (注:3 11同11 3算1种) Input 一个数N(1 <= N <= 10^9) Output 共K行:每行2个数,i j,表示N = i^2 + j^2(0 <= 

1080 两个数的平方和

基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数N,将N表示为2个整数i j的平方和(i <= j),如果有多种表示,按照i的递增序输出. 例如:N = 130,130 = 3^2 + 11^2 = 7^2 + 9^2 (注:3 11同11 3算1种) Input 一个数N(1 <= N <= 10^9) Output 共K行:每行2个数,i j,表示N = i^2 + j^2(0 <= i <= j). 如果无法分解为2个数的平

51Nod 1684 子集价值 (平方和去括号技巧)

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1684 题意: 新建一个位运算,求所有子集通过这个位运算后的答案的平方和是多少. 先想弱化版: 新建一个位运算,求所有子集通过这个位运算后的答案的和是多少. 枚举每一个二进制位,看有多少个子集能够使这一位为1 dp[i]表示前i个数中,能使枚举的这一位为1的方案数 根据第i个数选或者是不选转移 ans= Σ  2^j * 第j位的dp[n] 这里是平方和 设一个子集位运算

51nod 1090 3个数和为0 &amp; 51nod 1267 4个数和为0(标记二分)

题目意思: 3个数的和为0: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1090 给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从中找出所有和 = 0的3个数的组合.如果没有这样的组合,输出No Solution.如果有多个,按照3个数中最小的数从小到大排序,如果最小的数相等则按照第二小的数排序. Input 第1行,1个数N,N为数组的长度(0 <= N <= 1000) 第2 -

有1到10w这10w个数,去除2个并打乱次序,如何找出那两个数

有1到10w这10w个数,去除2个并打乱次序,如何找出那两个数 描述:有1到10w这10w个数,去除2个并打乱次序,如何找出那两个数.1.位图的方法:假设待处理数组为A[10w-2]定义一个数组B[10w],这里假设B中每个元素占用1比特,并初始化为全0for(i=0;i <10w-2;i++){ B[ A[i] ]=1}那么B中为零的元素即为缺少的数据这种方法的效率非常高,是计算机中最常用的算法之一2.首先计算1到10w的和,平方和. 然后计算给定数字的和,平方和. 两次的到的数字相减,可以得

sdut 1-2 输出N个数的平方和立方值 (制表符“\t”的使用)

1-2 输出N个数的平方和立方值 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握C++的输入.输出方法 利用VC++开发环境,创建一个控制台应用程序,利用cin.cout语句使得程序能够根据输入的整数值,输出相应的平方和立方值 输入 一个整数 输出 由两部分组成,第一部分占一行,输出表头"NumberSquareCube":注意每一项占一个制表符的宽度(使用"\t"控制,每行末尾也有"\t

如何不运用第三方变量实现两个数的交换

当遇到交换两个变量的时候,我们通常使用的是借助第三方变量实现两个数的交换.那么如果不使用第三方变量时,该怎么操作呢. 下面有两种方法: 1.通过已有的两个变量之间的加或减实现: 这种方法对于两个都是无限接进int取值范围,而相加超出int取值范围的情况不适用. 2.通过异或实现(异或符号为^) ******************************************************************************************************

20150328晚,不使用乘号运算符实现两个数相乘

//20150328晚,不使用乘号运算符实现两个数相乘 #include <stdio.h> #include <stdlib.h> #pragma warning(disable:4996) //using namespace std; int main() { int m, n, t; long long ll, absn, absm; while (scanf("%d %d", &m, &n) != EOF) { absn = n; abs