任意给定一个大于1的正整数n,设计一个算法求出n的所有正因数 任意给定一个大于1的正整数n,设计一个算法求出n的所有因数.
作者&投稿:邵曼 (若有异议请与网页底部的电邮联系)
任意给定一个大于1得正整数n,设计一个算法求出n得所有因数。这题要怎么做?~
第二步:依次以(2n-1)的整数d为除数去除n,检查余数是否为0,若是,则d是n的因数;若不是,则d不是n的因数。
第三步:在n的因数中加入1和n,
第四步:输出n的所有因数。
对于数据范围 你自己修改a,b的类型吧
#include"stdio.h"
#include"math.h"
void main()
{
int a,b;
puts("Enter a;");
scanf("%d",&a);
for(b=1;b<=sqrt(a);b++)
if(a%b==0)
printf("%d=%d*%d\n",a,b,a/b);
}
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int n;
cout<<"Please input a number: ";
cin>>n;
cout<<n<<"=";
for(int i=2;i<=n;i++){
while(n!=i)
{
if(n%i==0){
cout<<i<<"*";
n=n/i;
}
else break;
}
}
cout<<n<<endl;
}
楼上的时间复杂度为还是比较高 为O(n) 其中很多遍历都是重复的 我这里的代码可以达到时间复杂度O(√n)
#include
void main()
{
int i;
int number;
printf("请输入一个大于1的正整数");
scanf("%d",&number);
for(i=2;i * i
追问:
看不懂。
追问:
数学题的规范解题步骤。
追问:
谢谢啦。
追答:
采纳个最佳答案呗~
评论
0
0
0
加载更多
我就是高二的。
第一步:输入一个大于1的正整数n;
第二步:令a=1;
第三步:令b是n除以a的余数;
第四步:若b=0,则输出a;
第五步:令a=a+1;
第六步:若a<=n,则回到第三步。
第二步:依次以(2n-1)的整数d为除数去除n,检查余数是否为0,若是,则d是n的因数;若不是,则d不是n的因数。
第三步:在n的因数中加入1和n,
第四步:输出n的所有因数。
对于数据范围 你自己修改a,b的类型吧
#include"stdio.h"
#include"math.h"
void main()
{
int a,b;
puts("Enter a;");
scanf("%d",&a);
for(b=1;b<=sqrt(a);b++)
if(a%b==0)
printf("%d=%d*%d\n",a,b,a/b);
}
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int n;
cout<<"Please input a number: ";
cin>>n;
cout<<n<<"=";
for(int i=2;i<=n;i++){
while(n!=i)
{
if(n%i==0){
cout<<i<<"*";
n=n/i;
}
else break;
}
}
cout<<n<<endl;
}