谁是英雄

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

十个数学家(编号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谁是英雄,分解质因子求约数个数!的更多相关文章

  1. 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)( ...

  2. 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,求满 ...

  3. 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 ...

  4. hdu6237 分解质因子

    题意:给一堆石子,每次移动一颗到另一堆,要求最小次数使得,所有石子数gcd>1 题解:枚举所有质因子,然后找次数最小的那一个,统计次数时,我们可以事先记录下每堆石子余质因子 的和,对所有石子取余 ...

  5. HDU 4135 Co-prime (容斥+分解质因子)

    <题目链接> 题目大意: 给定区间[A,B](1 <= A <= B <= 10 15)和N(1 <=N <= 10 9),求出该区间中与N互质的数的个数. ...

  6. 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 ...

  7. 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 ...

  8. 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 ...

  9. HDU1452:Happy 2004(求因子和+分解质因子+逆元)上一题的简单版

    题目链接:传送门 题目要求:求S(2004^x)%29. 题目解析:因子和函数为乘性函数,所以首先质因子分解s(2004^x)=s(2^2*x)*s(3^x)*s(167^x); 因为2与29,166 ...

随机推荐

  1. HttpURLConnection教程

    1.Class Overview An URLConnection for HTTP (RFC 2616) used to send and receive data over the web. Da ...

  2. Windows10系统切换JDK版本(前提是装了多个版本的JDK)

    由于是直接截屏,等我回过头来整理的时候忘记了文章原来的出处, 如作者本人看到,如有侵权,请联系删除!

  3. AJPFX简述java语言现状和发展

    作为一种最流行的网络编程语言之一,java语言在当今信息化社会中发挥了 重要的作用.Java语言具有面向对象.跨平台.安全性.多线程等特点,这使得java成为许多应用系统的理想开发语言.java应用在 ...

  4. AngularJS入门 & 分页 & CRUD示例

    一.AngularJS 简介 ​ AngularJS  诞生于2009年,由Misko Hevery 等人创建,后为Google所收购.是一款优秀的前端JS框架,已经被用于Google的多款产品当中. ...

  5. Java BigDecimal类的使用和注意事项

    1.对于金额相关运算,若是精度较高,基本上用BigDecimal进行运算,精度要求低的话用Long.Double即可 2.web后台接受金额用String接受,展示到前端一般也转成 String 3. ...

  6. Collection接口框架图

    Java集合大致可分为Set.List和Map三种体系,其中Set代表无序.不可重复的集合:List代表有序.重复的集合:而Map则代表具有映射关系的集合.Java 5之后,增加了Queue体系集合, ...

  7. 我用的主机,推荐给大家【gegehost】【戈戈主机】

    炎炎夏日冰点价格:戈戈主机史上最大优惠促销活动 1.7月1日至8日:买主机优惠大促销:主机买一送一,不限购买数量 请您通过客户中心或者淘宝购买一个主机之后,登录客户中心,提交问题, 提供要赠送的主机的 ...

  8. github修改仓库项目的语言类型

    github是 采用Linguist来自动识别你的代码应该归为哪一类. 解决方法: 我们可以在仓库的根目录下添加.gitattributes文件: ## 使用 `.gitattributes` 配置文 ...

  9. Tensorflow入门-上

    前置准备 在阅读本文之前,请确定你已经了解神经网络的基本结构以及前向传播.后向传播的基本原理,如果尚未了解,可以查看下文. 深度学习之神经网络 什么是TensorFlow? TensorFlow是Go ...

  10. 下载GitHub指定目录的文件

    使用网站 https://minhaskamal.github.io/DownGit/#/home