zoukankan      html  css  js  c++  java
  • 等式

    题目链接:https://www.nowcoder.com/acm/contest/90/F

    题目描述:

      给定n,求1/x + 1/y = 1/n (x<=y)的解数。(x、y、n均为正整数)

    知识点:  算术基本定理

    解题思路:

      (1/x + 1/y = 1/n)

      (yn + xn - xy = 0)

      (xy - xn - yn = 0)

      ((n-x)(n-y) - n^2 = 0)

      (n^2 = (n-x)(n-y) )

      问题至此就转变成问有多少个 ((n-x)) 和 ((n-y)) (((n-y) le (n-x))),满足上式,其实就是求 (n^2) 有多少个不大于 (n^2/2) 的因数。

      设 (n^2) 的因数个数为 (x)

      则答案等于 ((x+1)/2).

      先分解出 (n) 的算术基本式,(n^2) 的每个质因子的次数就是 (n) 对应质因子次数的两倍,然后用算术基本定理求出 (x).

    AC代码:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int maxn = 1e5+5;
     4 typedef long long ll;
     5 int has[maxn];
     6 int main(){
     7     int n,T;
     8     scanf("%d",&T);
     9     while(T--){
    10         memset(has,0,sizeof(has));
    11         scanf("%d",&n);
    12         int cnt=0;
    13         for(int i=2;i*i<=n;i++){
    14             if(n%i==0){
    15                 while(n%i==0){
    16                     n/=i;
    17                     has[cnt]++;
    18                 }
    19                 cnt++;
    20             }
    21             if(n==1)    break;
    22         }
    23         if(n!=1){
    24             has[cnt]=1;
    25             cnt++;
    26         }
    27         ll ans=1;
    28         for(int i=0;i<cnt;i++){
    29             ans*=(1+has[i]*2);
    30         }
    31         printf("%lld
    ",(ans+1)/2);
    32     }
    33     return 0;
    34 }

      

    “这些年我一直提醒自己一件事情,千万不要自己感动自己。大部分人看似的努力,不过是愚蠢导致的。什么熬夜看书到天亮,连续几天只睡几小时,多久没放假了,如果这些东西也值得夸耀,那么富士康流水线上任何一个人都比你努力多了。人难免天生有自怜的情绪,唯有时刻保持清醒,才能看清真正的价值在哪里。”
  • 相关阅读:
    中国SNS用户体验设计分析和互动性浅析
    jQuery的运行机制和设计理念
    Web前端工程师如何给自己定位?
    用户体验这点事儿
    css selection改变文字反选的背景颜色
    HTTP 状态代码
    [翻译]导致网站可用性差的十个最常见问题
    前端开发中的一些用户体验细节
    SQL的行转列问题
    ASP.NET动态添加文本框参考做法
  • 原文地址:https://www.cnblogs.com/Blogggggg/p/8645707.html
Copyright © 2011-2022 走看看