ural 1049. Brave Balloonists

给你十个数,求这个十个数的乘积有多少个因子N,求N的个位数是多少。

 

直接求每个数的质因子,然后比如2的个数有5个,3有2个,那么N = (5+1)*(2+1)。详见白皮书P184,还是党姐说的Orz个~

 

为防止溢出,乘下在%10即可~

 

#include <queue> #include <stack> #include <math.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include <limits.h> #include <string.h> #include <algorithm> using namespace std; const int MAX = 10000; int pri[MAX]; int a[MAX],cnt; int d[MAX]; void init() { cnt = 0; fill(a,a+MAX,1); a[0] = a[1] = 0; for(int i=2; i<MAX; i++) for(int j=2; j*i<MAX; j++) if( a[i] ) a[i*j] = 0; for(int i=2; i<MAX; i++) if( a[i] ) pri[cnt++] = i; } void Div(int x) { int n; for(int i=0; i<cnt && pri[i] <= x; i++) { n = x; while( n % pri[i] == 0 ) { d[i]++; n /= pri[i]; } } } int solve() { int ans = 1; for(int i=0; i<cnt; i++) { if( d[i] ) { ans *= (d[i] + 1); ans %= 10; } } return ans; } int main() { int x; init(); memset(d,0,sizeof(d)); for(int i=0; i<10; i++) { scanf("%d",&x); Div(x); } int ans = solve(); printf("%d/n",ans); return 0; }  

你可能感兴趣的:(ural 1049. Brave Balloonists)