51nod 1165 整边直角三角形的数量

题目链接:传送门

题意:

给定一个直角三角形的周长,有多少个这样的直角三角形

分析:

设三边长为 A,B,C A <= B <= C. A + B + C = L,A^2 + B^2 = C^2

两个方程联立消去C: A + B + sqrt(A^2 + B^2) = l;

B = ( L^2 - 2*L*A )/( 2*L- 2*A )

设t = L - A.  B = L - L^2/( 2*t );

因为 0 < A < L/2;且B为一个正整数。

因此 2*t必定为L^2的一个因子且这个因子必定含有2的倍数。

根据上面的不等式可以解出 sqrt(2)*L < t < L*2

代码如下:

#include <iostream>
#include <cstdio>
#include <cmath>
#include <set>
#include <cstring>
using namespace std;

const int maxn = 1e7+10;

typedef long long LL;

int p[maxn/10],cnt;
bool vis[maxn];
int fac[1000],tot;
int num[1000];

void init(){
    cnt=0;
    memset(vis,0,sizeof(vis));
    for(int i=2;i<maxn;i++){
        if(!vis[i]){
            p[cnt++]=i;
            for(int j=i+i;j<maxn;j+=i) vis[j]=1;
        }
    }
}

void get(LL x){
    tot=0;
    memset(num,0,sizeof(num));
    for(int i=0;i<cnt&&p[i]*p[i]<=x;i++){
        if(x%p[i]==0){
            fac[tot]=p[i];
            while(x%p[i]==0) num[tot]++,x/=p[i];
            num[tot]*=2;
            tot++;
        }
    }
    if(x>1) fac[tot]=x,num[tot++]=2;
}

int ans = 0;
LL n;
set<LL>st;

void dfs(int id,LL val){
    if(id>=tot||val>=2*n) return ;
    if(val>sqrt(2)*n&&val<2*n&&val%2==0)
        st.insert(val);
    if(num[id]>0){
        num[id]--;
        dfs(id,val*fac[id]);
        dfs(id+1,val*fac[id]);
        num[id]++;
    }
    dfs(id+1,val);
}

int main()
{
    init();
    int t;
    scanf("%d",&t);
    while(t--){
        scanf("%lld",&n);
        ans = 0;
        if(n%2){puts("0");continue;}
        get(n);
        st.clear();
        dfs(0,1);
        printf("%d\n",st.size());
    }
    return 0;
}
时间: 2024-08-15 02:09:37

51nod 1165 整边直角三角形的数量的相关文章

51nod 1003 阶乘后面0的数量

题目意思: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1003 n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 720,720后面有1个0. Input 一个数N(1 <= N <= 10^9) Output 输出0的数量 Input 示例 5 Output 示例 1 题目分析: 对于本题,只需要知道在n!中,如果包含5的倍数,则末尾多一个0,如果包含5^2,末尾添加2个0,类推如果包含5^k

51Nod 1003 阶乘后面0的数量(数学,思维题)

1003 阶乘后面0的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 n的阶乘后面有多少个0? 6的阶乘 = 1*2*3*4*5*6 = 720,720后面有1个0. Input 一个数N(1 <= N <= 10^9) Output 输出0的数量 Input示例 5 Output示例 1题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1003编程之美有讲:一个数 n

51Nod 1003 阶乘后面0的数量 | 思维

题意:n的阶乘后面0的个数,如果直接算出阶乘再数0的数量一定会超时的. 因为10=2*5,所以求出5贡献的次数就行. #include "bits/stdc++.h" using namespace std; #define LL long long #define INF 0x3f3f3f3f3f #define PI acos(-1) #define N 510 LL arr[N]; int main() { int n,k; while(~scanf("%d"

【51nod 1251】 Fox序列的数量(以及带限制插板法讲解)

为什么网上没有篇详细的题解[雾 可能各位聚聚觉得这道题太简单了吧 /kk 题意 首先题目是求满足条件的序列个数,条件为:出现次数最多的数仅有一个 分析 感谢 刚睡醒的 JZ姐姐在咱写题解忽然陷入自闭的时候为咱知道迷津 QwQ 那么套路来说第一想到的其实就是容斥辣 然后懒得想去网上黈力[雾 在然后,发现网上要么没推导公式(虽说是直接列不用化简的)要么就是推导公式是错的... 于是坐下来冷静分析:首先,我们考虑最高的出现次数为 x 的情况下,有多少个序列是满足条件的 容斥一发发现式子长这个样子(用到

【51nod】1251 Fox序列的数量

题解 容斥题 我们枚举出现次数最多的数出现了K次 然后我们需要计算的序列是所有数字出现个数都不超过K - 1次 我们枚举不合法的数字的数目j,说明这个排列里除了我们固定出现K次的数至少有j个数是不合法的,先让这j个数每个数出现k次,然后再随意排列 j最大是N / K 那么复杂度就是调和级数了 代码 #include <bits/stdc++.h> //#define ivorysi #define enter putchar('\n') #define space putchar(' ') #

JZOJ 1385. 直角三角形

题目 Description 二维平面坐标系中有N个点. 从N个点选择3个点,问有多少选法使得这3个点形成直角三角形. Input 第一行包含一个整数N(3<=N<=1500),表示点数. 接下来N行,每行包含两个用空格隔开的整数表示每个点的坐标,坐标值在-10^9到10^9之间. 每个点位置互不相同. Output 输出直角三角形的数量. Sample Input 输入1: 3 4 2 2 1 1 3 输入2: 4 5 0 2 6 8 6 5 7 输入3: 5 -1 1 -1 0 0 0 1

Linux redis的安装与配置

Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主持. 1.环境 # lsb_release LSB Version:    :core-4.0-ia32:core-4.0-noarch:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-ia32:printing-4.0-noarchDistri

linux下redis安装

Redis的安装: tar zxvf redis-2.6.4.tar.gz cd redis-2.6.4 直接make就行了 make 执行完后,会在当前目录中的src目录中生成相应的执行文件,如:redis-server redis-cli等:我们在/usr/local/目录中创建redis位置目录和相应的数据存储目录.配置文件目录等: mkdir /usr/local/redis/{conf,run,db} –pv cd /root/redis-2.8.17 cp redis.conf /u

《Entity Framework 6 Recipes》中文翻译系列 (6) -----第二章 实体数据建模基础之使用Code First建模自引用关系 (转)

2-5 使用Code First建模自引用关系 问题 你的数据库中一张自引用的表,你想使用Code First 将其建模成一个包含自关联的实体. 解决方案 我们假设你有如图2-14所示的数据库关系图的自引用表. 图2-14 一张自引用表 按下面的步骤为这张自引用的表及关系建模: 1.在项目中创建一个继承至DbContext上下文的类EF6RecipesContext. 2.使用代码清单2-5创建一个PictureCategoryPOCO(简单CLR对象)实体. 代码单清2-5 创建一个POCO实