zoukankan      html  css  js  c++  java
  • 【枚举约数】HackerRank

    题意:给你一个正整数n,问你存在多少个正整数对a,b(a<b),满足条件:存在正整数x,y,使得ax+by=n。

    就预处理出n以内所有数的约数,然后暴力枚举a,暴力枚举x,然后枚举n-ax的所有约数,判重,统计答案即可。

    #include<cstdio>
    #include<vector>
    #include<algorithm>
    using namespace std;
    typedef vector<int>::iterator ITER;
    vector<int>divisors[300010];
    int n,used[300010],ans;
    bool cmp(const int &a,const int &b)
    {
    	return a>b;
    }
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i)
    	  {
    	  	for(int j=1;j*j<=i;++j)
    	  	  if(i%j==0)
    	  		{
    	  	      divisors[i].push_back(j);
    	  	      if(j*j!=i)
    	  	      	divisors[i].push_back(i/j);
    	  	  	}
    	  	sort(divisors[i].begin(),divisors[i].end(),cmp);
    	  }
    	for(int a=1;a<n;++a)//枚举a
    	  for(int x=1;x*a<n;++x)//枚举x
    		{
    		  int yb=n-x*a;
    		  for(ITER it=divisors[yb].begin();it!=divisors[yb].end();++it)//*it 就是b
    		    {
    		      if((*it)<=a)//因为b>a
    		        break;
    		      if(used[*it]!=a)//防止重复统计
    		        {
    		          ++ans;
    		          used[*it]=a;
    		        }
    		    }
    		}
    	printf("%d
    ",ans);
    	return 0;
    }
  • 相关阅读:
    内层城循环应用——买衣服
    内外层循环用法
    自定义函数的应用
    少有人走的路 随笔
    拆单发货逻辑
    拆单发货-分布页
    拆单发货-主页
    SP--report存储过程
    关于C#对Xml数据解析
    C#模拟http 发送post或get请求
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/6295388.html
Copyright © 2011-2022 走看看