质因子分解习题
习题 分解 因子
2023-09-11 14:15:52 时间
问题 A: 完数
http://codeup.cn/problem.php?cid=100000592&pid=0
#include<cstdio>
#include<cmath>
int main(void)
{
int n;
int i,j;
while( scanf("%d",&n) != EOF )
{
if(n<6)
continue;
else
{
printf("6 ");
for(i=7;i<=n;i++)
{
int sum=1;
int sql=(int)sqrt(i*1.0);
for(j=2;j<=sql;j++)
{
if(i%j==0)
{
sum=sum+j+i/j;
}
}
if(sql*sql==i)// 36这种类似的情况
{
sum=sum-sql;
}
if(sum==i)
printf("%d ",i);
}
printf("\n");
}
}
return 0;
}
问题 C: 质因数的个数
http://codeup.cn/problem.php?cid=100000592&pid=2
题目中给的最大数并不是特别大。所以打印出前100多中的质数表就足以。
#include<cstdio>
#include<cmath>
int a[50]={2};
int main(void)
{
int i,j,n;
int k=1;
for(i=3;i<=120;i++)
{
for(j=2;j<=(int)sqrt(1.0*i);j++)
{
if(i%j==0)
break;
}
if(j>(int)sqrt(1.0*i))
{
a[k++]=i;
}
}
while( scanf("%d",&n) != EOF )
{
int count=0;
for(i=0;i<k;i++)
{
while(n%a[i]==0)
{
n=n/a[i];
count++;
}
}
if(n!=1)
{
count++;
}
printf("%d\n",count);
}
return 0;
}
问题 D: 约数的个数
http://codeup.cn/problem.php?cid=100000592&pid=3
#include<cstdio>
#include<cmath>
int main(void)
{
int n;
int number;
int i,j,count;
while(1)
{
scanf("%d",&n);
if(n==0)
break;
for(i=0;i<n;i++)
{
scanf("%d",&number);
count=0;
int sql=(int)sqrt(1.0*number);
for(j=1;j<=sql;j++)
{
if(number%j==0)
{
count++;
count++;
}
}
if(sql*sql==number)
count--;
printf("%d\n",count);
}
}
return 0;
}
精简版:
#include <cstdio>
#include <cmath>
int main() {
int n;
while (scanf("%d", &n), n) {
for (int i = 0; i < n; i++) {
int t, cnt = 0;
scanf("%d", &t);
int sqr = (int)sqrt(1.0 * t);
for (int i = 1; i <= sqr; i++) {
if (t % i == 0) cnt += 2; //如1和t本身, 一次性算2个
if (i * i == t) cnt--; //如36, 作为约数集合的对称轴6只算一次
}
printf("%d\n", cnt);
}
}
return 0;
}
问题 E: 完数与盈数
http://codeup.cn/problem.php?cid=100000592&pid=4
#include<cstdio>
#include<cmath>
int main(void)
{
int n;
int i,j;
int sum;
int a[50]={0};
int b[50]={0};
a[0]=6;
int a_index=1;
int b_index=0;
for(i=7;i<=60;i++)
{
sum=1;
int sql=(int)sqrt(i*1.0);
for(j=2;j<=sql;j++)
{
if(i%j==0)
{
sum=sum+j+i/j;
}
}
if( sqrt(i)*sqrt(i) == i )// 36这种类似的情况
{
sum=sum-sql;
}
if(sum==i)
a[a_index++]=i;
if(sum>i)
{
b[b_index++]=i;
}
}
printf("E: ");
for(i=0;i<a_index-1;i++)
{
printf("%d ",a[i]);
}
printf("%d\n",a[a_index-1]);
printf("G: ");
for(i=0;i<b_index-1;i++)
{
printf("%d ",b[i]);
}
printf("%d\n",b[b_index-1]);
return 0;
}
相关文章
- sort函数的应用习题
- sicp 2.3小结习题尝试解答
- 软件项目管理第4版课后习题[附解析]第九章
- 《Core Data应用开发实践指南》一2.16 习题
- 《电子元器件的可靠性》——习题
- 機器學習基石 机器学习基石(Machine Learning Foundations) 作业1 习题解答
- 机器学习基石(习题) 感知机在线性可分情况下迭代次数的表示
- 数据库原理及应用第7章课后习题答案
- SICP 习题 (2.10)解题总结: 区间除法中除于零的问题
- A: 习题6-4 有序插入
- 习题 12: 提示别人
- 习题 7: 更多打印
- c程序设计语言_习题8-4_重新实现c语言的库函数fseek(FILE*fp,longoffset,intorigin)
- c程序设计语言_习题1-19_编写函数reverse(s)将字符串s中字符顺序颠倒过来。
- 习题4.11 编程输出如下的数字图案:1 3 6 10 15
- 习题4.10 设有一长为3000m的绳子,每天减去一半,问需几天时间,绳子的长度会短于5m。
- 习题4.4 编写一个Java应用程序,在键盘上输入数n,计算并输出1!+2!+...+n!的结果。