迅雷笔试题_素勾股数的个数

题目:

勾股数,是由三个正整数组成的数组;能符合勾股定理 a*a + b*b = c*c ,(a, b, c) 的正整数解。如果 (a, b, c) 是勾股数,它们的正整数倍数,也是勾股数。如果 (a, b, c) 互质,它们就称为素勾股数。给定正整数N, 计算出小于或等于N的素勾股数个数。

样例输入:

10

样例输入:

1

思路:

产生素勾股数的方式:

设m > n 、m 和n 均是正整数,

a=m2-n2

b=2mn

c= m2+n2

若m 和n 是互质,而且m 和n 其中有一个是偶数,计算出来的 (a, b, c) 就是素勾股数

并且能够找到所有的素勾股数

实现:

 1 long long isHuzhi(long long a, long long b) {
 2     return b == 0 ? a : gcd(b, a % b);
 3 }
 4
 5 int main() {
 6
 7     while (scanf("%lld", &n) != EOF) {
 8         int count = 0;
 9         long long m = sqrt(n);
10         long long a, b, c;
11
12         for (long long i = 1; i <= m; i++) {
13             for (long long j = i + 1; j <= m; j += 2) {
14                 if (isHuzhi(j, i) == 1) {
15                     a = j * j - i * i;
16                     b = 2 * i * j;
17                     c = i * i + j * j;
18
19                     if (c <= n) {
20                         count++;
21                     }
22                 }
23             }
24         }
25
26         printf("%d\n", count++);
27     }
28     return 0;
29 }


原文地址:https://www.cnblogs.com/TonvyLeeBlogs/p/9637500.html

时间: 2024-08-27 19:11:55

迅雷笔试题_素勾股数的个数的相关文章

UVA106 - Fermat vs. Pythagoras(素勾股数)

题目链接 题目大意:给你一个数n,勾股数三元组(x,y,z)的定义:满足x < y < z, x^2 + y^2 = z^2.现在问这里里面有多少个三元组是素勾股数即满足x,y, z两两互质.并且判断剩下的1-n的数有多少是没有出现在勾股数三元组中. 解题思路:先找出所有的素勾股数(x, y, z) ,那么便可以通过(kx, ky, kz)得到不是素勾股数的勾股数.接着要换种方式构造素勾股数,公式:x = m^2 - n^2; y = 2?m?n; z = m^2 + n^2:其中若 m 和

003_C/C++笔试题_分享大汇总

(一)感谢:lhzstudio 01_C++经典面试题全集 50~100道 都附带有参考答案 02_C++开发工程师面试题库 100~150道 03_C++笔试题库之编程.问答题 150~200道 04_C++笔试题库之编程.问答题 200~300道 原文地址:https://www.cnblogs.com/luxiaoguogege/p/9786873.html

2015小米暑期实习笔试题_懂二进制(位运算)

总共3道题,最后一道还没AC出来... 世界上有10种人,一种懂二进制,一种不懂. 那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 此题解法类似于<编程之美>上面看到的某题 代码: #include <iostream> using namespace std; int countBitDiff(int m, int n) { int sum=0; for(int i=0;i<32;i++) if(

2015小米暑期实习笔试题_风口的猪-中国牛市(dp)

风口之下,猪都能飞.当今中国股市牛市,真可谓"错过等七年". 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价. 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票.若两次交易机会都放弃,收益为0. 设计算法,计算你能获得的最大收益. 输入数值范围:2<=n<=100,0<=prices[i]<=100 输入例子: 3,8,

微软公司笔试题_附上源码解决

第一道题 # -*- coding: utf-8 -*- ''' f(a*b, acb) => true f(abc*, abbc) => false f(**bc, bc) => true ''' import re string='abbc' Regex = re.compile(r'(abc)*') def f(Regex,string): mo = Regex.search(string) if mo.group()!='': return True else: return F

网易笔试题_塔的最小不稳定性

原题不再赘述,大概就是这么个意思: 输入n个数(均大于0)以及可以对这n个数进行操作的最多次数,每次操作将n个数中最大值-1,最小值+1,计算进行这样的操作后数组中(最大值-最小值)的最小值. java简单实现(暴力解) 1 package interview.test; 2 3 import java.util.*; 4 5 /** 6 * Created by BUAA514 on 2018-08-11. 7 */ 8 public class Main { 9 10 /** 11 * 题目

科大讯飞笔试题_杀手

题目: 有n个杀手排成一行,每个杀手都有一个不同的编号(编号1-n),在每个夜晚,杀手都会行动,如果某个杀手编号大于他右边的杀手的编号,他就会杀死他右边的杀手,杀手的行动是瞬间的,因此一个人可能某一个夜晚既杀死了别人,又被别人杀死,例如3,2,1这个顺序,在第一个夜晚2会杀死1,同时,3会杀死2,显而易见,一段时间后,就不会有人被杀系,平安夜就到来了,请问在平安夜之前有多少个夜晚. 输入: 输入第一行是一个整数n(1<=n<=100000),表示杀手的数量: 接下来一行有n个数,是一个1-n的

002_C/C++笔试题_简单算法程序

(一)冒泡排序法 1 #include <iostream> 2 using namespace std; 3 void bubblesort(int a[], int m); 4 int main(void) 5 { 6 int i; 7 int array[]={5,4,8,44,56,4,5,9}; 8 bubblesort(array,sizeof(array)/4);/*sizeof(array)/4,取长度,int类型是4字节*/ 9 /*打印已经排序的数组*/ 10 for(i

今日头条笔试题 1~n的每个数,按字典序排完序后,第m个数是什么?

# 由于n和m都是10^18的范围,暴力明显不行,只能dfs了.# 先预处理n的十进制,存到num数组中,长度计算出来为len, 答案存到Num中.# 写个函数cntOfBeginNum(int *Num,int anslen),计算以num为前缀的小于等于n的数的个数cnt,考虑长度比n的十进制长度小的数,则cnt+=1+10+100+1000......# 长度和n相等的则要特判一下,前缀Num和num的前缀有3种关系,> = < ,先判断是哪种,再计算.# 然后考虑答案的最高位非0,我们