[C语言]从键盘上输入一个大于3的整数,判断其是否为素数。

够了,我知道答案了,55分钟都没人能帮我解决也是够了。
标准答案在此。

void main() {
int m, n;
printf("please input the number:\n");
scanf("%d", &m);
for (n = 2; n <= m / 2; n++) if (m%n == 0) n = m;
if (m >= n ) printf("%d is a prime\n", m);
else printf("%d is not a prime number\n", m);
system("Pause");
}

这题可能有一点问题【哭了,我没注意break那个空】

#include <stdio.h>
void main()
{
    int m, n;
    printf("please input the number:\n");
    scanf("%d", &m);
    for (n = 2; n <= m / 2; n++) if (m % n == 0) break;
    //当m为素数,退出循环时n=m/2+1->(n-1)*2+1=m,由于大于3的素数一定是奇数,m/2*2=m-1
    //m为合数,n<=m/2->n*2<=m
    if (m >= n*2) printf("%d is not a prime number\n", m);
    else printf("%d is a prime\n", m);
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-09-24
首先回答“有些地方看不懂,条件里已经有了i<n,为什么还要if(i<n)?”
你看他的for循环里面,是不是i是从2循环到n-1,如果中间有某个数能被n整除就跳出,此时i肯定是某个在2~n-1中的数,所以这时候必有i<n就可以判断它是素数;然后如果2~n-1中间的任何数都不能被n整除,那么当i=n时for条件不成立也退出循环,这时候i=n,所以i<n不成立,就判断它为素数了。
然后回答你的程序的问题。
首先,for循环里的语句要用{ }括起来,然后你的for循环里面做的事情是对i从2~n-1,都判断i能不能被n整除,不能则输出语句"n是素数"能则输出"n不是素数",事实上,如果你用{}括起来,程序会输出n-1-2+1=n-2次的输出语句"n是素数"或者"n不是素数",而不能得到你想要的结果。
有问题再找我讨论哈
第2个回答  2019-05-09
m>=n*2追问

结果恰好相反 11被识别为非素数,8却被识别为素数

追答

那估计这题错了

那里应该是n不是m

要么这样写

m>=m+1 ll n > m

上面错了m>m+1 ll n>m/2

第3个回答  2019-05-09
大于3的整数,

c语言:输入一个大于3的整数并判断其是否为素数
你的代码逻辑是错误的:素数是除1和自身外没有因数的正整数,你只 if(n%i!=0){printf("%d是素数\\n",n);} 这样一次判断就认为是素数了?比如8,8%3不等于0,但谁都知道8不是素数!谭浩强的代码显然是对的——for(i=2;i<n;i++)中的;i<n是说要把n所有有可能的因子都试除一次,看看...

用C语言写一个 给出一个大于或等于3的正整数,判断他是不是一个素数...
printf("输入一个大于等于3的正整数: ");scanf("%d",&n);if(isPrime(n))printf("%d is a prime number\\n",n);elseprintf("%d is not a prime number\\n",n);return 0;}示例运行结果:输入一个大于等于3的正整数: 7 7 is a prime number 输入一个大于等于3的正整数: 25 25 is no...

c语言 输入一个大于3的整数n,判定它是否为素数。为什么只需使n被2...
你说反了,是不能被2~根号n之间的任何一个整数整除才是素数 若n=a*b=根号n*根号n,那么如果a>根号n,则b肯定小于根号n,,所以只需检测到根号n,剩下的大的一半一定已经检测过了,当然你一直检测到n也行,就是浪费了时间

题目C语言 给出一个大于或等于3的正整数,判断他是不是个素数 这事素...
1. 如果用来验证的除数不是素数,那么没有必要进行验证。例如能被6整除的整数必然可以被2和3整除。2. 如果用来验证的除数大于“被除数开根号”,那么也没有必要进行验证。因为如果一个整数可以被分解为两个不等整数的乘积的话,其中必然有一个小于“被除数开根号”。

从键盘输入一个大于3的正整数,输出距离该数最近的素数。用c语言编程
include<math.h> void main(void){ int i,j,t,m;int a,a0,a1;scanf("%d",&a);m=sqrt(a);for(i=2;i<=m;i++)if(a%i==0)break;if(i>m){ printf("%d\\n",a);return;} t=a;while(1){ m=sqrt(t)+1;for(i=2;i<=m;i++)if(t%i==0)break;if(i>m){ a0=t;bre...

功能:从键盘输入一个大于3的整数,调用函数fun判断 其是否素数,然后在mai...
include <stdio.h> include <math.h> bool fun(int n){ for(int i=2;i<sqrt(n);i++){ if(n%i==0)return 0;if(i==n)return 1;} } void main(){ int n;scanf("%d",&n);if(fun(n))printf("%d是一个素数\\n",n);else printf("%d不是一个素数\\n",n);} ...

给出一个大于或等于3的正整数,判断他是不是一个素数。使用c语言程序编 ...
prime(int data)\/*判断是不是质数的函数*\/ { int i;for(i=2;i<=sqrt(data);i++)\/*sqrt是根号函数*\/ { if(data%i==0)\/*求模为0代表除尽*\/ return 0;\/*0代表不是质数*\/ } return 1;\/*当足次循环的时候,代表是质数,会执行到此句*\/ } void main(){ int m;scanf("%d",&...

C语言程序题:对于一个大于或者等于3的正整数,判断它是不是一个素数...
int main(){char ch;int count = 0;int num[3];int myNum;printf("请输入三个字符:0-9,A-F\\n");while( (ch = getchar()) && count = '0' && ch = 'A' && ch int main(){int Num;printf("请输入一个小于1000的正整数\\n");...

C语言 对于一个大于或等于3的正整数,判断它是不是一个素数
n是一直不变的,这个程序只是判断输入的n是不是素数。如果n=9,那我们会依次令i等于2至8(改进算法2至3),只要有一个i可以整除n,那么就不是素数。

对一个大于或等于3的正整数,判断它是不是一个素数。
如果按上述的算法,用C来作应该是下面程序!main(){ int i, n;printf("please input the data:\\n");scanf("%d",&n);for(i = 2; i < n; i++){ if(n % i == 0){ printf("this is not a prime number.\\n");break;} } if(i == n)printf("this is a prime number.\\n...

相似回答