NYOJ-476谁是英雄,分解质因子求约数个数!
谁是英雄
- 描述
-
十个数学家(编号0-9)乘气球飞行在太平洋上空。当横越赤道时,他们决定庆祝一下这一壮举。于是他们开了一瓶香槟。不幸
的是,软木塞在气球上打了一个洞,氢气泄漏,气球开始下降,眼看就要落入海中,所有人将要被鲨鱼吃掉。
但是尚有一线生机--若其中一人牺牲自己跳下去的话,那他的朋友们还能多活一会儿。但仍然有一个问题存在--谁
跳下去?所以他们想了一个非常公平的办法来解决这个问题--首先,每人写一个整数ai;然后计
算出a1×a2×a3×a4×……×a10的积的约数的个数N。例如,6的约数有4个(1、2、3、6),则N为4。这位牺牲自
己的英雄将由N的个位数来决定(编号为N的个位数的人要跳下去)。你的任务是求出N。
- 输入
- T(T<=10)组测试数据。
十个整数ai(1≤ai≤10000)。 - 输出
- N的个位数
- 样例输入
-
1
1 2 6 1 3 1 1 1 1 1 - 样例输出
-
9
其实以前做过类似求乘积的约数个数,很明显乘积会超范围,肯定是要从因子入手的,于是百度百科了一下“约数个数定理”,就知道有快速方法,只不过要先求出质因子个数,假如其乘积的质因子a1,a2,a3,a4...ak的个数分别是p1,p2,p3...pk,那么约数个数sum=(p1+1)(p2+1)(p3+1)....(pk+1);这便是约数个数定理;数据范围是10000,只有10个数,所以可以暴力分解质因数然后求出每个质因数的个数即可;
下面提供两种代码:
1.0 先打个10000的素数表,因为这10个数每个数都要分解质因子,只需将每个数分别分解(怎么分解请看代码):
using namespace std;
const int N=10000+10;
int k,b[N],s[N],a[N]
void init()
{
k=0;
memset(b,-1,sizeof(b));
memset(s,0,sizeof(s));//将10000内的素数储存起来,分解的时候直接除以素数;
b[0]=b[1]=0;
for(int i=2; i<=N; i++)
if(b[i])
{
s[k++]=i;
if(i>N/i) continue;
for(int j=i*i; j<=N; j+=i)
b[j]=0;
}
}
int main()
{
int t,x,i,j;
init();
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof(a));//存每个质因子出现的次数;
int f=1;
for(i=1; i<=10; i++)
{
scanf("%d",&x);
if(x==1)
continue;
else//分解质因数;
{
f=0;
for(j=0; j<k; j++)
{
while(x%s[j]==0)//注意一直除下去;
{
x/=s[j];
a[s[j]]++;//质因子出现的次数;
}
if(x==1) break;
if(b[x])//如果x本身就是素数了再加起来;比如:6/2=3;
{
a[x]++;
break;
}
}
}
}
if(f)//如果10个数全部是1则输出1;
{
printf("1\n");
continue;
}
else
{
int sum=1;
for(i=0; i<k; i++)//这里查找就方便一点;
if(a[s[i]])
sum*=(a1[s[i]]+1);
printf("%d\n",sum%10);//千万注意取个位数,题意描述不清,不然此代码一遍过;
}
}
return 0;
}
2.0 原理和上面一样,只不过内存少了一点吗,就是基于数据个数和范围都较小,所以分解质因子的时候暴力分解:
using namespace std;
const int N=10000+10;
int b[N],a[N];
int main()
{
int t,x,i,j;
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof(a));
for(i=1; i<=10; i++)
{
scanf("%d",&x);
for(j=2; x!=1&&j<=10000; j++)//分解质因数;
if(x%j==0)
{
x/=j;
a[j]++;
j--;//这里和上面那个while()含义一样,
}
}
int sum=1;
for(i=0; i<10000; i++)//这里查询就比较慢了,很多都不是素数况且没有出现过;
if(a[i])
sum*=(a[i]+1);
printf("%d\n",sum%10);
}
return 0;
}
NYOJ-476谁是英雄,分解质因子求约数个数!的更多相关文章
- N!分解质因子p的个数_快速求组合数C(n,m)
int f(int n,int p) { ) ; return f(n/p,p) + n/p; } https://www.xuebuyuan.com/2867209.html 求组合数C(n,m)( ...
- HDU 4497 GCD and LCM(分解质因子+排列组合)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497 题意:已知GCD(x, y, z) = G,LCM(x, y, z) = L.告诉你G.L,求满 ...
- UVA 10780 Again Prime? No Time. 分解质因子
The problem statement is very easy. Given a number n you have to determine the largest power of m,no ...
- hdu6237 分解质因子
题意:给一堆石子,每次移动一颗到另一堆,要求最小次数使得,所有石子数gcd>1 题解:枚举所有质因子,然后找次数最小的那一个,统计次数时,我们可以事先记录下每堆石子余质因子 的和,对所有石子取余 ...
- HDU 4135 Co-prime (容斥+分解质因子)
<题目链接> 题目大意: 给定区间[A,B](1 <= A <= B <= 10 15)和N(1 <=N <= 10 9),求出该区间中与N互质的数的个数. ...
- Minimum Sum LCM UVA - 10791(分解质因子)
对于一个数n 设它有两个不是互质的因子a和b 即lcm(a,b) = n 且gcd为a和b的最大公约数 则n = a/gcd * b: 因为a/gcd 与 b 的最大公约数也是n 且 a/gcd ...
- Codeforces Round #828 (Div. 3) E2. Divisible Numbers (分解质因子,dfs判断x,y)
题目链接 题目大意 给定a,b,c,d四个数,其中a<c,b<c,现在让你寻找一对数(x,y),满足一下条件: 1. a<x<c,b<y<d 2. (x*y)%(a ...
- BNU 13259.Story of Tomisu Ghost 分解质因子
Story of Tomisu Ghost It is now 2150 AD and problem-setters are having a horrified time as the ghost ...
- HDU1452:Happy 2004(求因子和+分解质因子+逆元)上一题的简单版
题目链接:传送门 题目要求:求S(2004^x)%29. 题目解析:因子和函数为乘性函数,所以首先质因子分解s(2004^x)=s(2^2*x)*s(3^x)*s(167^x); 因为2与29,166 ...
随机推荐
- 2017 JUST Programming Contest 3.0 E. The Architect Omar
E. The Architect Omar time limit per test 1.0 s memory limit per test 256 MB input standard input ou ...
- AC自动机 HDOJ 5384 Danganronpa
题目传送门 /* 题意:多个文本串,多个模式串在每个文本串出现的次数 AC自动机:这就是一道模板题,杭电有道类似的题目 */ /************************************ ...
- 二分查找/暴力 Codeforces Round #166 (Div. 2) B. Prime Matrix
题目传送门 /* 二分查找/暴力:先埃氏筛选预处理,然后暴力对于每一行每一列的不是素数的二分查找最近的素数,更新最小值 */ #include <cstdio> #include < ...
- 转 PHP Cookies
cookie 常用于识别用户. 什么是 Cookie? cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie. ...
- 自动化中Java面试题
1.面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些 ...
- [转]探索 Windows Azure Storage
本文转自:https://msdn.microsoft.com/zh-tw/jj573842 概觀 儲存服務 (Storage services) 在 Windows Azure 運算模擬器中提供了可 ...
- ubuntu设置root账号密码
Ubuntu Linux有一个与众不同的特点,那就是初次使用时,你无法作为root来登录系统,为什么会这样?这就要从系统的安装说起.对于其他Linux系统来 说,一般在安装过程就设定root密码,这样 ...
- 使用JDBC创建出版社和书籍管理系统
1.需求 已知如下两个表: publisher id name(唯一) address book id isbn name publisher_id 欢迎进入书籍管理系统 1.出版社管理:增.删(na ...
- Laravel 的 API 认证系统 Passport 三部曲(二、passport的具体使用)
GQ1994 关注 2018.04.20 09:31 字数 1152 阅读 1316评论 0喜欢 1 参考链接 Laravel 的 API 认证系统 Passport 三部曲(一.passport安装 ...
- VUE scoped css 局部css内嵌样式方法 >>>
<style scoped> .ivu-carousel >>> button { background-color: buttonface;} .demo-carous ...