合数编程题
你所讲的就是筛选法。
用筛选法解题要遵循以下原则:确定范围, 根据条件, 逐个实验, 筛区不符合条件的解. 在实际情况下, 如果不符合条件的元素或集合容易求的, 而确定的范围也有限,则可以优先考虑用筛选法.
下面举一个求某范围内素数例子来说明: 用筛选法求素数时有一个着名的方法叫做Eratosthenes筛选法.
方法大致如下:当求1倒100的素数时, 1不是素数,当然划去, 在2到100内划去2的倍数(不包括2), 再划去3的倍数(不包括3),(由于4已经划去)划去5的倍数,直至划去不超过10的倍数,剩下的就都是素数.需要知道的是在初等数论中有有这样的定理: 合数N的不等于1的最小正因数不大于N的平方根.
对于Redraiment猜想,下面这个代码可以pass,但是是严格来说是不行的,仅仅是因为测试用例的不全面所致,应该还是有好的算法的(看过大虾pass0ms的,汗!),不能这样一个一个的去判断,对于要求100000000以内的素数个数的话就算用该算法法也要6秒多。
#include <iostream>
#include <cmath>
using namespace std;
#define max 10000002
bool a[max+1]; //注意,要用bool型,否则在有的服务器上不能通过
int main()
{
int n,i,s,j,t;
memset(a,1,sizeof(a));
t=sqrt(max);
for(i=2;i<=t;i++)
if(a[i]) // 很重要,算法的优化,否则会超时
{
for(j=i;j*i<=max;j++)
a[i*j]=0;
}
while(cin>>n&&n!=0)
{
s=0;
for(i=2;i<=n;i++) if(a[i]) s++;
cout<<s<<endl;
}
return 0;
}
来自我的博客http://hi..com/yyvszh/blog/item/a75b872c97c2983d349bf792.html
B. 编写程序,从控制台读入一个合数,将其分解
#include <stdio.h>
int isprime(unsigned long n)
{
unsigned long i;
if(n<2)
return 0;
for(i=2;i*i<=n;++i)
if(n%i==0)
return 0;
return 1;
}
int main()
{
unsigned long n,i;
while(scanf("%lu",&n)==1)
{
for(i=2;n>1;)
{
if(isprime(i)&&n%i==0)
{
printf("%lu ",i);
n/=i;
}
else
i++;
}
printf(" ");
}
return 0;
}
C. 编程题,正整数,如果它能被7整除,或者它的十进制表示法中某个位数上的数字为7,则称其为与7相关的数见补充
任何数至少有两个因数,一个是1,另一个是这个数本身。例如7这个数,它既能被1整除(即1是它的因数),也能被它本身7整除(即7是它的因数 )。但有的数除了1和它本身外,还有其它的因数,比如9,除了1和9是它的因数外,它还有因数3。 再比如6,除了1和6是它的因数外,2和3也是它的因数 。 所有这些除了1和它本身外还有其它因数的数,就叫合数。刚才说的9和6就都是合数。而像5、7、11这样的数,只有1 和它本身这两个因数,它们 就叫质数。
D. c语言编程题判断m是否为合数
不是素数就是合数,只要判断是否为素数就行了。也即判断m能否与大于零小于m的整数相除余数为零:#includes<stdio.h>main()int m,i;for(i=2;i<m;i++){if(m%i=0)printf("m是合数");break;}
E. 求1至100之间的合数之和JAVA编程题
public class Test{
public static void main(String []args){
int cn = 0;
for(int i=1;i<=100;i++){
i=i%10;
cn = cn+i;
}
System.out.println("个位上数之和 "+cnt);
}
}
F. 能帮我读一下这道程序题吧,谢谢
#include<stdio.h>
intmain()
{
inta[10001],i,j,n,k=1;
//创建一个10000的数组,每个元素对应其标号。
for(i=1;i<=10000;i++)
a[i]=i;
//保留数组内所有的质数,合数下标对应的元素变为0
for(i=2;i<=100;i++)
for(j=i+i;j<=10000;j+=i)
a[j]=0;
//输入一个数字,输出该数字是两个质数和的组数
while(scanf("%d",&n),n)
{
k=0;
for(i=3;i+i<n;i+=2)
if(a[i]&&a[n-i])
{
k++;
cout<<a[i]<<","<<a[n-i]<<endl;
}
printf("%d ",k);
}
return0;
}
G. 用C++编写一个判断素数合数的程序,要求输入素数时显示出“此数是素数”,输入合数时给出该合数的分解式
#include<iostream.h>
boolprime(intn)//判断是否为素数
{
inti;boolflag=true;
for(i=2;i<=n/2;i++)
if(n%i==0)flag=false;
if(flag==true||n==2)return1;//是的话返回true
return0;//否则flase
}
intfun(intn)//将合数分解,这里用了函数的递归调用
{
inti;
if(prime(n))
{cout<<n;return0;}
for(i=2;i<n;i++)
{
if(n%i==0&&prime(i))
cout<<i<<'*';
elsecontinue;
break;
}
fun(n/i);
}
voidmain()
{
intn;
cout<<"请输入一个数字n:";
cin>>n;
if(prime(n))cout<<"此数为素数。"<<endl;
else{cout<<"此数为合数:"<<"n=";fun(n);cout<<endl;}
}
H. 有c语言编程题吗
有
1、程序每次读入一个正三位数,然后输出逆序的数字。注意,当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
2、UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8。现在,你的程序要读入一个整数,表示BJT的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果分小于10分,需要保留十位上的0。如1124表示11点24分,而905表示9点5分,36表示0点36分,7表示0点7分。
有效的输入范围是0到2359,即你的程序不可能从测试服务器读到0到2359以外的输入数据。
你的程序要输出这个时间对应的UTC时间,输出的格式和输入的相同,即输出一个整数,表示UTC的时和分。整数的个位和十位表示分,百位和千位表示小时。如果小时小于10,则没有千位部分;如果小时是0,则没有百位部分;如果分小于10分,需要保留十位上的0。
提醒:要小心跨日的换算。
3、你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。
4、我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
5、每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。
现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。
6、你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。
程序要处理的幂最大为100。
7、你的程序要读入一行文本,其中以空格分隔为若干个单词,以‘.’结束。你要输出这行文本中每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如“it's”算一个单词,长度为4。注意,行中可能出现连续的空格。