codeup 质因子分解
题号:10000592
A题 :完数
题目链接:http://codeup.cn/problem.php?cid=100000592&pid=0
#include <iostream>
using namespace std;
int wan(int n){
int sum=0,i;
for(i=1;i<n;i++){
if(n%i==0){//查找质因子
sum+=i;
}
}
if(sum==i){//如果质因子之和等于n,就是完数
return sum;
}else{
return 0;
}
}
int main(){
int n;
while(cin>>n){
int i;
for(i=1;i<=n;i++){
if(wan(i))
cout<<i<<endl;
}
}
return 0;
}
B题 :完数(同A)
题目链接:http://codeup.cn/problem.php?cid=100000592&pid=1
C题 :质因数的个数
题目链接:http://codeup.cn/problem.php?cid=100000592&pid=2
#include <iostream>
#include <cmath>
using namespace std;
const int maxn=1000010;
int prime[maxn],pNum=0;
bool p[maxn]={0};
void find_prime(int n){
int sqr=(int)sqrt(1.0*n);
for(int i=2;i<=sqr;i++){
if(p[i]==false){
prime[pNum++]=i;
for(int j=i+i;j<=sqr;j+=i){
p[j]=true;
}
}
}
}
int main(){
int number;//测试的数据
while(cin>>number){
int count=0;// 质因子的个数
find_prime(number);
for(int i=0;i<pNum;i++){
while(number%prime[i]==0){
number/=prime[i];
count++;
}
}
if(number>1) count++;
cout<<count<<endl;
}
return 0;
}
D题 :约数的个数
题目链接:http://codeup.cn/problem.php?cid=100000592&pid=3
#include<cstdio>
#include<cmath>
int main() {
int n, a, count;
while(scanf("%d", &n) != EOF) {
if(n == 0)
break;
for(int i = 0; i < n; i++) {
scanf("%d", &a);
if(a == 1)
printf("1\n");
else{
count = 0;
double sqr = sqrt(1.0 * a);
for(int j = 2; j <= sqr; j++)
if(a % j == 0)
count = count + ((j < sqr) ? 2 : 1);//如果在1到根号n之间,就是2,如果大于根号n,就加一
}
}
}
return 0;
}
E题 :完数与盈数
题目链接:http://codeup.cn/problem.php?cid=100000592&pid=4
#include <iostream>
using namespace std;
int wan(int n){
int sum=0,i;
for(i=1;i<n;i++){
if(n%i==0){//查找质因子
sum+=i;
}
}
if(sum==i){//如果质因子之和等于n,就是完数
return 1;
}else if(sum>i){
return 2;
}else{
return 0;
}
}
int main(){
int E[60];
int G[60];
int x=0,y=0;
int i;
for(i=2;i<=60;i++){
if(wan(i)==1){
E[x]=i;
x++;
}else if(wan(i)==2){
G[y]=i;
y++;
}
}
cout<<"E: ";
for(int i=0;i<x;i++){
cout<<E[i];
if(i==x-1) cout<<endl;
else cout<<" ";
}
cout<<"G: ";
for(int i=0;i<y;i++){
cout<<G[i];
if(i==y-1) cout<<endl;
else cout<<" ";
}
return 0;
}