NYOJ 416 氢气球
【摘要】 题目链接~~>
做题感悟:开始就想到了解题思路,但是不知道怎样求约数的个数的公式。
解题思路:这题主要是知道求约数的公式: 一个数的约数就等于这个数所有的质约束的指数加 1 相乘的结果。例如:12 = 2*2*3 所以 12 的约数的个数为 (2+1)*(1+1)=6 ,同时也可以知道所有约数的和,例如 12 所有约数的和为:(2^0 + 2^1)*( 3^0 +3...
做题感悟:开始就想到了解题思路,但是不知道怎样求约数的个数的公式。
解题思路:这题主要是知道求约数的公式: 一个数的约数就等于这个数所有的质约束的指数加 1 相乘的结果。例如:12 = 2*2*3 所以 12 的约数的个数为 (2+1)*(1+1)=6 ,同时也可以知道所有约数的和,例如 12 所有约数的和为:(2^0 + 2^1)*( 3^0 +3^1 ) 把这个式子分解开就是所有约数。
代码:
-
#include<stdio.h>
-
#include<iostream>
-
#include<map>
-
#include<string>
-
#include<string.h>
-
#include<stdlib.h>
-
#include<math.h>
-
#include<vector>
-
#include<queue>
-
#include<algorithm>
-
using namespace std ;
-
#define pret(a,b) memset(a,b,sizeof(a))
-
const int INF = 99999999 ;
-
const double esp = 0.000000001 ;
-
const int MX= 10005 ;
-
int b[MX] ;
-
bool is_prime[MX] ;
-
int prime[MX],num ;
-
void init()
-
{
-
num=0 ;
-
memset(is_prime,false,sizeof(is_prime)) ;
-
for(int i=2 ;i<MX ;i++)
-
{
-
if(!is_prime[i])
-
prime[num++]=i ;
-
for(int j=0 ;j<num&&i*prime[j]<MX ;j++)
-
{
-
is_prime[i*prime[j]]=true ;
-
if(i%prime[j]==0)
-
break ;
-
}
-
}
-
-
}
-
int main()
-
{
-
init() ;
-
int T,x ;
-
scanf("%d",&T) ;
-
while(T--)
-
{
-
memset(b,0,sizeof(b)) ;
-
for(int i=0 ;i<10 ;i++)
-
{
-
scanf("%d",&x) ;
-
for(int j=0 ;j<num ;j++)
-
if(x%prime[j]==0)
-
{
-
while(x%prime[j]==0)
-
{
-
x/=prime[j] ;
-
b[j]++ ;
-
}
-
}
-
}
-
int ans=1 ;
-
for(int i=0 ;i<num ;i++)
-
if(b[i])
-
ans=(ans*(b[i]+1))%10 ;
-
printf("%d\n",ans) ;
-
}
-
return 0 ;
-
}
文章来源: blog.csdn.net,作者:Linux猿,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nyist_zxp/article/details/21174303
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)