POJ 2603
2015-03-10 20:29
246 查看
这个题主要就是一个数学知识点:
10 = 2^1 * 5 ^1 所以10的约数的个数就是 (1+1) * (1+1) 2的指数加一乘以5的指数加一
20 = 2^2 * 5 ^1 所以 20的约数的个数是(2+1) * (1 + 1)
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int n = 10;
const int MaxNi = 10000;
int a
;
int yueshu
[MaxNi];//记录每个数的约数
int all_yueshu[MaxNi];
int init()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<MaxNi;j++)
{
yueshu[i][j] = 0;
all_yueshu[j] = 0;
}
}
}
int main()
{
//freopen("POJ-1166敌兵布阵.txt","r",stdin);
void computer_yueshu(int ,int );
freopen("1.txt","r",stdin);
int max_ni=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
max_ni = max(max_ni,a[i]);
}
init();
for(int i=0;i<n;i++)
{
computer_yueshu(i,2);
}
for(int i=0;i<n;i++)
{
for(int j=2;j<=max_ni;j++)
{
if(yueshu[i][j]>0)
{
all_yueshu[j]+=yueshu[i][j];
}
}
}
//cout<<"ok"<<endl;
long long int result = 1;
for(int j=2;j<=max_ni;j++)
{
if(all_yueshu[j]!=0)
{
// cout<<"约数 = "<<j<<" 次数 = "<<all_yueshu[j]<<endl;
result *= (all_yueshu[j]+1);
}
}
// cout<<"ok"<<endl;
cout<<result%10<<endl;
}
//计算第i个数的约数
void computer_yueshu(int i,int chushu)
{
bool isprime(int );
int x = a[i];
// cout<<"1 "<<x<<endl;
if(isprime(x))
{
// cout<<"prime"<<endl;
yueshu[i][x]++;
return ;
}
else{
if(x<chushu)
{
return ;
}
if(x%chushu==0)
{
yueshu[i][chushu]++;
a[i] /= chushu;
// cout<<a[i]<<endl;
computer_yueshu(i,chushu);
}
else{
chushu++;
computer_yueshu(i,chushu);
}
}
}
bool isprime(int x)
{
for(int i=2;i<=sqrt(x);i++)
{
if(x%i==0)
return false;
}
return true;
}
10 = 2^1 * 5 ^1 所以10的约数的个数就是 (1+1) * (1+1) 2的指数加一乘以5的指数加一
20 = 2^2 * 5 ^1 所以 20的约数的个数是(2+1) * (1 + 1)
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int n = 10;
const int MaxNi = 10000;
int a
;
int yueshu
[MaxNi];//记录每个数的约数
int all_yueshu[MaxNi];
int init()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<MaxNi;j++)
{
yueshu[i][j] = 0;
all_yueshu[j] = 0;
}
}
}
int main()
{
//freopen("POJ-1166敌兵布阵.txt","r",stdin);
void computer_yueshu(int ,int );
freopen("1.txt","r",stdin);
int max_ni=0;
for(int i=0;i<n;i++)
{
cin>>a[i];
max_ni = max(max_ni,a[i]);
}
init();
for(int i=0;i<n;i++)
{
computer_yueshu(i,2);
}
for(int i=0;i<n;i++)
{
for(int j=2;j<=max_ni;j++)
{
if(yueshu[i][j]>0)
{
all_yueshu[j]+=yueshu[i][j];
}
}
}
//cout<<"ok"<<endl;
long long int result = 1;
for(int j=2;j<=max_ni;j++)
{
if(all_yueshu[j]!=0)
{
// cout<<"约数 = "<<j<<" 次数 = "<<all_yueshu[j]<<endl;
result *= (all_yueshu[j]+1);
}
}
// cout<<"ok"<<endl;
cout<<result%10<<endl;
}
//计算第i个数的约数
void computer_yueshu(int i,int chushu)
{
bool isprime(int );
int x = a[i];
// cout<<"1 "<<x<<endl;
if(isprime(x))
{
// cout<<"prime"<<endl;
yueshu[i][x]++;
return ;
}
else{
if(x<chushu)
{
return ;
}
if(x%chushu==0)
{
yueshu[i][chushu]++;
a[i] /= chushu;
// cout<<a[i]<<endl;
computer_yueshu(i,chushu);
}
else{
chushu++;
computer_yueshu(i,chushu);
}
}
}
bool isprime(int x)
{
for(int i=2;i<=sqrt(x);i++)
{
if(x%i==0)
return false;
}
return true;
}
相关文章推荐
- poj 2603 注意理解题意 数论
- POJ 2603
- poj2603
- POJ 2603
- POJ 2603 Brave balloonists 笔记
- POJ 2603 Brave Balloonists
- POJ 2603 Brave balloonists
- poj 2603 Brave balloonists
- POJ 2603 HDU 1963 Investment(完全背包)
- Poj 2603 约数个数和
- POJ 2603 Brave balloonists(素因子分解)
- poj 3126
- POJ 2763 Housewife Wind
- Poj 3321 Apple Tree
- poj 2002 Squares(枚举+点hash)
- poj1458求最长公共子序列的长度
- poj 3321 Apple Tree DFS时间戳预处理+树状数组
- poj 1742 多重背包
- Ants (POJ 1852)
- poj1182 Food Chain