C - Aladdin and the Flying Carpet 有多少种长方形满足面积为a(<=10^12),且最短边>=b;长方形边长为整数,且一定不可以是正方形。
2017-03-24 20:37
253 查看
/** 题目:C - Aladdin and the Flying Carpet 链接:https://vjudge.net/contest/154246#problem/C 题意:有多少种长方形满足面积为a,且最短边>=b;长方形边长为整数,且一定不可以是正方形。 思路:求出a的素因子以及每个素因子的个数,然后搜索所有满足条件的方法数。 其实可以求出所有<b的方法数,用总的减去它,可以更快,不过更麻烦。 */ #include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1e6+100; ll prime[maxn]; int z; vector<ll>v; int num[104]; int cous; ll a, b; void init() { memset(prime, 0, sizeof prime); for(int i = 2; i < maxn; i++){ if(prime[i]==0){ for(int j = i+i; j < maxn; j+=i){ prime[j] = 1; } } } z = 0; for(int i = 2; i < maxn; i++){ if(prime[i]==0){ prime[z++] = i; } } /// cout<<"prime number = "<<z<<endl; 78000ge } ll ans; void solve(int h,ll value) { if(h==0){ if(value>=b&&a/value>=b&&value*value!=a) ans++; return; } for(int i = 0; i <= num[h-1]; i++){ if(i>0){ value*=v[h-1]; } solve(h-1,value); } } int main() { init(); int T, cas=1; cin>>T; while(T--) { int cnt = 0; scanf("%lld%lld",&a,&b); v.clear(); ll n = a; cous = 0; memset(num, 0, sizeof num); for(int i = 0; i < z&&prime[i]*prime[i]<=n; i++){ if(n%prime[i]==0){ v.push_back(prime[i]); while(n%prime[i]==0){ n/=prime[i]; num[cous]++; } cous++; } } if(n>1){ v.push_back(n); num[cous++] = 1; } ans = 0; solve(cous,1); printf("Case %d: %lld\n",cas++,ans/2); } return 0; }
相关文章推荐
- 度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数x,y来表示。度度熊必须沿着网格线画一个正方形,使所有点在正方形的内部或者边界。然后把这个正方形剪下来。问剪掉正方形的最小面积是多少。
- (codevs 3044 矩形面积求并)<可以不用线段树>
- 【数学思维 && ax + by = n 给你n让你求有多少对(a,b) a<b 满足方程其中x,y是正整数】HackerRank Satisfactory Pairs
- 给定整数a1、a2、a3、...、an,判断是否可以从中选出若干个数,使得它们的和等于k(k任意给定,且满足-10^8 <= k <= 10^8)。
- 给定整数a1、a2、a3、...、an,判断是否可以从中选出若干个数,使得它们的和等于k(k任意给定,且满足-10^8 <= k <= 10^8)。
- 【C语言小练习】按照下列正方形矩阵的规律,输出下列正方形矩阵。边长为正整数,可以在源代码里更改。
- 输入一个长方形的宽和高(正整数),请打印出它的边长和面积
- 第四讲c语言程序初体验——项目二:<1>长方形的周长和面积;<2>电阻并联;<3>温度单位转换
- Help Tomisu UVA - 11440 难推导+欧拉函数,给定正整数N和M, 统计2和N!之间有多少个整数x满足,x的所有素因子都大于M (2<=N<=1e7, 1<=M<=N, N-M<=1E5) 输出答案除以1e8+7的余数。
- C# 找出泛型集合中的满足一定条件的元素 List<T>.Wher()
- 华为机考 给你一个N*M的矩阵,每个位置的值是0或1,求一个面积最大的子矩阵,这个矩阵必须是一个正方形,且里面只能由1构成,输出最大的正方形边长。其中n,m<=400;
- [题解]编程设有一个n*m方格的棋盘(1<=m,n<=100),求该棋盘包含多少正方形,长方形?
- # include <errno.h >查看错误代码errno是调试程序的一个重要方法。当Linux C API函数发生异常时,一般会将errno变量赋值一个整数,不同的值表示不同的含义,可以通过查看
- 给两个整数对n与m,数出有多少整数对(a,b)满足:0<a<b<n,且(a*a+b*b+m)/(a*b)仍是整数
- 两个Long类型真的不能直接用>或<比较么?其实可以
- 趣题:正方形的边长是多少?
- <未完>iOS开发可以用到的mac命令
- 关于Spring事务<tx:annotation-driven/>的理解(Controller可以使用@Transactional)
- SparseArray<E>详解 在一些情况下可以代替HashMap提高性能
- IDEA上运行可以,hadoop 集群上报错。requested memory < 0, or requested memory > max configured, requestedMemo